在我的機器上,以下程序將1234寫入輸出。字符串文字的字節順序和case語句中字符串的使用
const char str[] = "1234";
printf("%c%c%c%c\n",
(int) (0xff & (*(uint32_t*) str) >> 0),
(int) (0xff & (*(uint32_t*) str) >> 8),
(int) (0xff & (*(uint32_t*) str) >> 16),
(int) (0xff & (*(uint32_t*) str) >> 24));
這意味着str
在內部表示爲0x34333231
,和第一字節str[0]
表示至少顯著8位。
這是否意味着str
編碼在小端?並且這個程序的輸出依賴於平臺嗎?
另外,有沒有一個方便的方法來在switch case語句中使用1,2,4和8個字符串文字?我無法找到任何方法將字符串轉換爲整數,因爲*(const uint32_t* const) "1234"
不是一個常量表達式,並且0x34333231
/0x31323334
可能是平臺相關的,必須用十六進制表示。
編輯:
換句話說,是0xff & *(uint32_t*) str
總是等於str[0]
?
呃,沒關係,只是意識到它是,也是爲什麼。
謝謝你,這就是我一直在尋找。但是8字符文字呢?這是我的機器上的字大小,但它大於'int'的大小。 – RPFeltz
@RPFeltz只有當你的編譯器有一個擴展來做到這一點。按照標準,字符文字總是int。 –