c++ - 以编程方式检查字节顺序

标签 c++ memory-management endianness

我知道以编程方式测试字节序的最常用方法是像这样转换为 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/

相关文章:

c++ - 我应该使用哪个容器

visual-studio-2012 - 为什么 vtable 指针在 x86 编译程序上对齐到 8 个字节?

c++ - vs C++ 跨端 union

c# - 64 位 .Net 应用程序中的内存限制?

linux - 为什么free命令显示的buff/cache比vmstat和meminfo列出的多

java - JVM内存中的java char big endian吗?

java - 在 Java 中将十六进制文件转换为 unsigned int 32 Big-Endian

c++ - 从构造函数中抛出异常

c++ - 在 Windows 上使用 boost::asio 发送组播性能不佳

C++ 纯虚函数的多重继承问题