当我阅读一篇有关大/小端的文章时,我很困惑。
代码如下:
#include <iostream>
using namespace std;
int i = 12345678;
int main()
{
char *p = (char*)&i; //line-1
if(*p == 78) //line-2
cout << "little endian" << endl;
if(*p == 12)
cout << "big endian" << endl;
}
问题:
在第 1 行中,我可以使用以下方法进行转换吗static_cast<char*>(&i)
?
-
第2行,根据代码,如果是little-endian,那么78
存储在最低字节,否则12
存储在最低字节中。但我认为,i = 12345678;
将以二进制形式存储在内存中。
如果是小端字节序,则最后一个字节i
的二进制文件将存储在最低字节中,但我不明白的是它如何保证最后一个字节i
is 78
?
就像,如果i = 123;
, then i
的二进制是01111011
,能否保证在小端模式下,23
存储在最低字节?
我更喜欢一个reinterpret_cast http://www.cplusplus.com/doc/tutorial/typecasting/.
Little-endian 和 big-endian 指的是方式bytes,即 8 位量,存储在内存中,not两位小数的数量。如果i
有价值0x12345678
,那么你可以检查0x78
and 0x12
确定字节顺序,因为两个十六进制数字对应于一个字节(在我编程的所有硬件上)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)