[英]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.