对于下面的代码:
short shortArray [] = { ( 'B' << 8 ) + 'A', ( 'D' << 8 ) + 'C', ( 'F' << 8 ) +
'E', 'G' };
cout << (char*)shortArray;
输出是:
ABCDEFG
有人可以向我解释一下这是如何工作的吗?
最佳答案
表达式( 'B' << 8 ) + 'A'
结果类型为 int
, 将等于 'B'*256 + 'A'
.
当转换为 short
时(假设 short
表示为两个 8 位字节)此值由字节对 AB
表示, 其中A
是最低有效字节。在小端机器上,最低有效字节最先出现在内存中(即 'A'
在最左边,下一个字节是 'B'
)。在大端机器上,'B'
将在最左边。
您描述的输出表明您的主机架构是小端架构。
英特尔处理器都是小端。从历史上看,包括 Motorola 68000 系列处理器、PowerPC 和 Sparc(来自 Sun Microsystems)在内的一系列 CPU 都是 big-endian。网络字节顺序(用于通过网络传输数据)是大端字节序。
注意:为了便于讨论,我忽略了您的代码具有未定义行为这一事实。流媒体运营商<<
它接受 char *
假设存在终止 char
具有值(value) '\0'
.您的代码不能确保存在终止符。
关于c++ - 为什么在将 short[] 转换为 char* 时数组会反转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48373426/