大端小端判断

参考链接有3种方式,以下为最容易的方式:

联合体是共享内存,在联合体重定义一个char类型,一个int类型,
给int数据赋值为1,根据char的值是否为1就可以判断大小端了;
若char类型为1,则为小端;
若char类型不为1,则为大端;

在这里插入图片描述
//判断大小端
static bool isLocalhostBigEndian(void)
{
union
{
int a;
char b;
} num;
num.a = 1;
qDebug()<<“Local byte order is” << ((num.b != 1) ? “big endian” : “little endian”);
return num.b != 1;
}

//将高低端数据反向
template <typename T>
static void reverseInteger(T& num)
{
    static_assert(std::is_integral<T>::value, "Must be an integral type.");
    static_assert((sizeof(T) == 4) || (sizeof(T) == 2) || (sizeof(T) == 1), "Integer must be 4, 2 or 1 byte(s).");
    char * _byte = reinterpret_cast<char *>(&num);
    for (unsigned int i=0; i<sizeof(T)/2; ++i)
    {
        char c = _byte[i];
        _byte[i] = _byte[sizeof(T) - 1 - i];
        _byte[sizeof(T) - 1 - i] = c;
    }
}

测试代码:
void test()
{
//已知其他进程数据为小端
bool isBig_endian = isLocalhostBigEndian();
int value = 16777216;
if(!isBig_endian )
reverseInteger(val);

//若为小端,则会打印出 1
qDebug()<<"========= value : "<<value;

}

int main()
{
test();
return 0;
}

参考:https:
//blog.csdn.net/qq_36391130/article/details/81944217

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值