【发布时间】:2015-02-05 13:20:16
【问题描述】:
我有这个代码。它打印 ABBAA,我不知道为什么。 16961 的表现如何?这个数字是什么意思?
#include <stdio.h>
int main() {
short a[]={'A',16961,16706,65,16961,16706};
printf("%s\n",&((char*)a)[2]);
return 0;
}
【问题讨论】:
-
编译时包含所有警告和调试信息 (
gcc -Wall -Wextra -g)。在调试器中逐步运行程序 (gdb)。阅读endianess和undefined behavior -
看到那里的
char*的转换了吗?想想像16961这样的两字节值如果分成两个字节会是什么,并查看例如this ASCII table. -
这是测试机器字节序的好方法。 ABBAA 是 little-endian,我猜您应该在 big-endian 机器上使用 BAAB(对于 shorts 都有 16 位)。 (提示:字符串结束字符是 C 中的
0)