Compare Pattern
看code的時候發現很妙的為什麼會有0x20出現在比較的地方
原來是因為ASCII Code 大小寫 會差32
所以如果要大小寫通通都可以接受的話,就是這樣判斷:)
//\6 代表後面跟的是六個字母 \5五個字母 unsigned char dns_pattern[] = "\6Belkin\5range"; static int pattern_cmp(unsigned char *ptr, int len, unsigned char *pattern) { int i, j=0; int pattern_len = strlen(pattern); for(i=0; i < len; i++) { if(dns_hijack_enabled > 3) printk("i=%d, j=%d, %x %x\n", i, j, ptr[i] | 0x20, pattern[j] | 0x20); if((ptr[i] | 0x20) == (pattern[j] | 0x20)) j++; else j=0; if(j == (pattern_len)) return 0; } return -1; }
458 Views
if( (ptr[i] | 0x20) == (pattern[j] | 0x20))
這什麼鬼?
就是比對char,如果一樣的話j也會往下計數,所以如果最後j和字串長度相同,
代表這兩個字串是相同的。
0x20就是不分大小寫 C 和 c 都是相等的!