Pio*_*old 5 c++ casting short char endianness
对于以下代码:
short shortArray [] = { ( 'B' << 8 ) + 'A', ( 'D' << 8 ) + 'C', ( 'F' << 8 ) +
'E', 'G' };
cout << (char*)shortArray;
Run Code Online (Sandbox Code Playgroud)
输出为:
ABCDEFG
有人可以向我解释其工作方式吗?
该表达式( 'B' << 8 ) + 'A'的结果类型为int, 将等于'B'*256 + 'A'。
当转换为 a short(假设 ashort表示为两个 8 位字节)时,该值由字节对表示AB,其中A是最低有效字节。在小端机器上,最低有效字节首先出现在内存中(即 是'A'最左边的,下一个字节是'B')。在大端机器上,'B'将位于最左边。
您描述的输出表明您的主机架构是小端字节序。
Intel 处理器都是小端字节序。历史上,包括 Motorola 68000 系列处理器、PowerPC 和 Sparc(来自 Sun Microsystems)在内的一系列 CPU 都是大端字节序。网络字节顺序(用于通过网络传输数据)是大端字节序。
注意:为了讨论,我忽略了所示代码具有未定义行为的事实。<<接受 a的流操作符char *假定存在char以 value结尾的操作符'\0'。您的代码不能确保终止符存在。