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