在我的机器上,以下程序将 1234 写入其输出。
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]
?
嗯,没关系,刚刚意识到它是,也是为什么。