繁体   English   中英

为什么,当将一个short []转换为char *时,数组是否反转了?

[英]Why, when casting a short[] to char* is the array reversed?

对于以下代码:

short shortArray [] = { ( 'B' << 8 ) + 'A', ( 'D' << 8 ) + 'C', ( 'F' << 8 ) + 
'E', 'G' };
cout << (char*)shortArray;

输出是:

ABCDEFG

有人能解释一下这种方法的运作方式吗?

short是16位,char是8.因此一个short可以包含两个字符。

( 'B' << 8 ) + 'A'部分将'B'的值移位8位并将其加到A.所以现在短的每一半都保持不同字符的ASCII码。 在这种情况下A和B.

将它转换为char *现在使得编译器将数组解释为一个字符串(它只是一个字符数组)并且你得到了输出

表达式( 'B' << 8 ) + 'A'具有int类型的结果,将等于'B'*256 + 'A'

当转换为short (假设short表示为两个8位字节)时,该值由字节对AB ,其中A是最低有效字节。 在小端机器上,最低有效字节首先出现在内存中(即'A'是最左边的,下一个字节是'B' )。 在大端机器上, 'B'将是最左边的。

您描述的输出表明您的主机架构是little-endian。

英特尔处理器都是小端的。 从历史上看,包括摩托罗拉68000系列处理器,PowerPC和Sparc(来自Sun Microsystems)在内的一系列CPUS都是大端的。 网络字节顺序(用于通过网络传输数据)是big-endian。

注意:为了便于讨论,我忽略了您所显示的代码具有未定义行为的事实。 流接入运算符<<接受char *假定存在值为'\\0'的终止char 您的代码无法确保存在终结符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM