gpt4 book ai didi

c++ - 为什么在将 short[] 转换为 char* 时数组会反转?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:21:55 25 4
gpt4 key购买 nike

对于下面的代码:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com