[英]What does this char string related piece of C++ code do?
bool check(const char *text) {
char c;
while (c = *text++) {
if ((c & 0x80) && ((*text) & 0x80)) {
return true;
}
}
return false;
}
0x80
是什么,整個神秘的 function 是做什么的?
測試非零的x & 0x80
表達式的結果(如您顯示的代碼中所做的兩次)檢查char
操作數( x
)的最高有效位(位 7)是否設置為1 。 在您的情況下,代碼循環通過給定的字符串查找設置了該位的兩個連續字符( c
,它是“當前”字符的副本,以及*test
,下一個)。
如果找到這樣的組合,則 function 返回true
; 如果未找到並且循環到達nul
終止符(因此c = *text++
表達式變為零),則返回false
。
至於為什么要進行這樣的檢查——我只能猜測,但是如果設置了高位,那么字符將不是標准的 ASCII 值(並且可能是 Unicode 對中的第一個,或者其他一些多字節字符表示)。
可能有用的參考資料:
1請注意,這種按位與測試實際上是檢查該位的唯一安全方法,因為 C++ 標准允許char
類型是有signed
的(測試負值是一種替代方法)或unsigned
的(測試 >=需要 128 個); 如果實現的char
具有“錯誤”類型的簽名,那么這些測試中的任何一個都將失敗。
如果沒有更多上下文,我不能完全確定,但它看起來像 function 檢查字符串是否包含經典 7 位 US-ASCII 范圍之外的任何 UTF-8 字符。
while (c=*text++)
將循環直到在 C 風格的字符串中找到 nul 終止符; 將每個char
分配給c
。 c & 0x80
檢查是否設置了c
的最高有效位。 *text & 0x80
對text
指向的char
執行相同的操作(這將是c
之后的字符,因為它是作為while
條件的一部分遞增的)。
因此,如果text
指向的字符串中任意兩個相鄰的char
設置了它們的最高有效位,則此 function 將返回true
。 UTF-8 中的任何代碼點 U+0080 及以上的情況都是如此; 因此我猜測這個 function 是用於檢測 UTF-8 文本。
重寫為不那么緊湊:
while (true)
{
char c = *text;
text += 1;
if (c == '\0') // at the end of string?
return false;
int temp1 = c & 0x80; // test MSB of c
int temp2 = (*text) & 0x80; // test MSB of next character
if (temp1 != 0 && temp2 != 0) // if both set the return true
return true;
}
MSB 表示最高有效位。 位 7。 純 ascii 字符為零
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.