C++ 按照字节逆序

C++ 按照字节逆序

开发过程中遇到一个新旧兼容问题,在WriteInt到底层时需要按照字节逆序,并且适配了64位和32位。


算法核心思想

  • 按位运算

源码如下

template<typename T>
T reverseBytes64(const T & val, int size = 8)
{
    T dest = 0x0000000000000000;
    T head = 0xFFFFFFFFFFFFFFFF;
    for (int i = 0; i < size; i++) {
        T bitVal = (head >> (i * 8)) & val;
        T tmp = bitVal >> ((size - 1 - i) * 8);
        dest = dest | tmp << (i * 8);
    }

    return dest;
}

template<typename T>
T reverseBytes32(const T & val, int size = 4)
{
    T dest = 0x00000000;
    T head = 0xFFFFFFFF;
    for (int i = 0; i < size; i++) {
        T bitVal = (head >> (i * 8)) & val;
        T tmp = bitVal >> ((size - 1 - i) * 8);
        dest = dest | tmp << (i * 8);
    }

    return dest;
}

猜你喜欢

转载自blog.csdn.net/lishuai_guo/article/details/79098886