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;
}