簡體   English   中英

字符混亂中的轉義序列

[英]Escape sequence in char confusion

我在這里遇到了這個例子。

#include <iostream>

int main()
{
    int i = 7;

    char* p = reinterpret_cast<char*>(&i);
    if(p[0] == '\x7') //POINT OF INTEREST
        std::cout << "This system is little-endian\n";
    else
        std::cout << "This system is big-endian\n";
}

我感到困惑的是if語句。 轉義序列在這里的表現如何? 我得到與p[0] == '\\07'\\x為十六進制轉義序列)相同的結果。 如何檢查p[0] == '\\x7'告訴我系統的字節序是小端還是大端?

十六進制7和八進制7恰好是相同的值,十進制7也是如此。

該檢查旨在嘗試確定該值以int的第一個字節還是最后一個字節結尾。

小字節序系統將以“反向”順序存儲值的字節,低位在前

07 00 00 00

大端系統將首先存儲“大”端

00 00 00 07

通過讀取第一個字節,代碼將查看7是否結束。

(32位)整數在內存中的布局為;

Big endian:

+-----+-----+-----+-----+
|  0  |  0  |  0  |  7  |
+-----+-----+-----+-----+
   ^ pointer to int points here

Little endian:

+-----+-----+-----+-----+
|  7  |  0  |  0  |  0  |
+-----+-----+-----+-----+
   ^ pointer to int points here

該代碼基本上執行的操作是讀取整數指針指向的第一個char ,在小端字節序為\\x0情況下,在大端字節序為\\x7

十進制的7與十六進制的7和八進制的7相同,因此使用'\\x7''\\07'或什至只使用7 (數字文字,而不是字符)都沒有關系。

至於字節序測試: i值為7,這意味着它將在其最低有效字節中具有數字7,在所有其他字節中具有數字0。 強制轉換char* p = reinterpret_cast<char*>(&i); 使p指向i表示中的第一個字節。 然后,測試將檢查該字節的值是否為7。如果是,則它是最低有效字節,這表示系統為低端字節序。 如果該值不是7,則不是小端系統。 該代碼假定它是一個大端序的,盡管並沒有嚴格建立(我相信有些異國情調的系統也具有某種混合的端序,盡管實際上該代碼可能不會在這種情況下運行)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM