首页 > 其他 > 详细

判断机器CPU的大小端模式并将数据转换成小端形式

时间:2019-12-22 15:02:31      阅读:100      评论:0      收藏:0      [点我收藏+]

首先看一下概念

Little-Endian

就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端

Big-Endian

就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。

第一种方式,在 C++ 程序运行期间判断并转换

#include <algorithm> // std::reverse

// 判断和转换都在函数内部进行
template <typename T>
T LittleEndianToNative(const T x) {
    int endian_test=1;
    char *p_endian_test=(char *)&endian_test;
    if(*p_endian_test == 1) {// 小端模式
        // 直接返回即可
        return x;
    } else {// 大端模式
        // 将大端模式转换成小端
        T data_reversed = x;
        std::reverse(reinterpret_cast<char*>(&data_reversed),
                     reinterpret_cast<char*>(&data_reversed) + sizeof(T));
        return data_reversed;
    }
}

第二种方式,在编译期检查

检查机器的CPU是否为小端模式的

#include <algorithm> // std::reverse

inline bool LittleEndianCheck() {
#ifdef BOOST_BIG_ENDIAN
    return false;
#else
    return true;
#endif
}

template <typename T>
T LittleEndianToNative(const T x) {
    if (LittleEndianCheck()) {// 小端模式,直接返回即可
        return x;
    } else {// 大端模式,将大端模式转换成小端
        T data_reversed = x;
        std::reverse(reinterpret_cast<char*>(&data_reversed),
                     reinterpret_cast<char*>(&data_reversed) + sizeof(T));
        return data_reversed;
    }
}

判断机器CPU的大小端模式并将数据转换成小端形式

原文:https://www.cnblogs.com/phillee/p/12077155.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!