我知道以编程方式测试字节序的最常用方法是像这样转换为 char*:
short temp = 0x1234;
char* tempChar = (char*)&temp;
但是可以像这样转换为 short* 来完成吗:
unsigned char test[2] = {1,0};
if ( *(short *)test == 1)
//Little-Endian
else
//Big-Endian
“测试”缓冲区将使用 Little-Endian 约定(从右到左:“0”在低地址,“1”在高地址)保存在内存中(在 x86 平台上)我是对的吗就像使用“temp”var 一样?
更一般地说,如果我有一个字符串: char tab[] = "abcdef"; 它如何存储在内存中?它会像“fedcba”这样颠倒过来吗?
谢谢。提前:-)
附言。
有什么方法可以查看程序数据在系统内存中的具体情况吗? 我希望在“现实生活”中看到 Little-Endian 中的字节交换。
最佳答案
您的代码可能会在实践中起作用(您可以尝试一下!)。但是,从技术上讲,它会调用未定义的行为;该标准不允许您通过另一种类型的指针访问 char 数组。
And more generally if I have a string: char tab[] = "abcdef"; How would it be stored in the memory? Will it be reversed like: "fedcba"?
没有。否则 tab[0]
会给你 f
。
关于c++ - 以编程方式检查字节顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11197455/