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


    首先看一下概念

    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;
        }
    }
  • 相关阅读:
    Java自学-多线程 线程池
    Java自学-多线程 交互
    Java自学-多线程 死锁
    Java自学-多线程 线程安全的类
    Windows任务计划定时执行脚本简介
    利用 Powershell 编写简单的浏览器脚本
    Edge浏览器现已支持Tampermonkey(油猴)
    Chrome扩展移植到Edge浏览器教程
    <Android> Location Service 分析
    <OPTEE>Trusted Application结构分析
  • 原文地址:https://www.cnblogs.com/phillee/p/12077155.html
Copyright © 2020-2023  润新知