C++字节序测试

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

#include <iostream>

int main() {
    uint32_t num = 0x12345678;
    uint8_t* ptr = reinterpret_cast<uint8_t*>(&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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MrWang.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值