C++字节序测试

下面是一个简单的字节序测试示例,可以用来检查当前计算机的字节序:
(本人所写的所有博客知识点示例均可上机测试,需要可以收藏)

#include 

int main() {
    uint32_t num = 0x12345678;
    uint8_t* ptr = reinterpret_cast(&num);
    if (*ptr == 0x78) {
        std::cout << "Little Endian" << std::endl;
    } else if (*ptr == 0x12) {
        std::cout << "Big Endian" << std::endl;
    } else {
        std::cerr << "Unknown byte order" << std::endl;
    }
    return 0;
}

这个程序首先定义了一个 32 位整数 num,它的值为 0x12345678。然后使用 reinterpret_castnum 的地址转换为指向 uint8_t 类型的指针 ptr,这样就可以按字节访问 num 中的内容了。

接着,判断 *ptr 的值,如果为 0x78,说明当前计算机是小端字节序;如果为 0x12,说明当前计算机是大端字节序。如果都不是,就输出一个错误信息,表示无法判断当前计算机的字节序。

如果你对字节序不是特别清晰,请接着往下看示例
假设我们有一个 32 位整数,它的十六进制表示为 0x12345678,在内存中的存储方式取决于所使用的计算机的字节序。

如果是小端字节序的计算机,在内存中,这个整数的低位字节会被存储在低地址处,也就是 0x78 存放在第一个字节的位置,高位字节则存放在高地址处。因此,在内存中,这个整数会被存储为:

地址:   0x1000    0x1001    0x1002    0x1003
内容:    0x78      0x56      0x34      0x12

而如果是大端字节序的计算机,在内存中,这个整数的高位字节会被存储在低地址处,低位字节则存放在高地址处。因此,在内存中,这个整数会被存储为:

地址:   0x1000    0x1001    0x1002    0x1003
内容:    0x12      0x34      0x56      0x78

这里需要注意的是,这个整数本身并没有发生变化,只是在不同的计算机上以不同的字节序存储而已。

你可能感兴趣的:(夜深人静学C++,c语言,开发语言)