C++ 按照位元組逆序
阿新 • • 發佈:2019-01-05
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;
}