我的机器是64位的。我的代码如下:
unsigned long long periodpackcount=*(mBuffer+offset)<<32|*(mBuffer+offset+1)<<24|* (mBuffer+offset+2)<<16|*(mBuffer+offset+3)<<8|*(mBuffer+offset+4);
mBuffer 是无符号字符*。我想获取 5 个字节的数据并将数据转换为主机字节顺序。我怎样才能避免这个警告?
我的机器是64位的。我的代码如下:
unsigned long long periodpackcount=*(mBuffer+offset)<<32|*(mBuffer+offset+1)<<24|* (mBuffer+offset+2)<<16|*(mBuffer+offset+3)<<8|*(mBuffer+offset+4);
mBuffer 是无符号字符*。我想获取 5 个字节的数据并将数据转换为主机字节顺序。我怎样才能避免这个警告?
有时最好分成几行以避免出现问题。你有一个 5 字节的整数要读取。
// Create the number to read into.
uint64_t number = 0; // uint64_t is in <stdint>
char *ptr = (char *)&number;
// Copy from the buffer. Plus 3 for leading 0 bits.
memcpy(ptr + 3, mBuffer + offset, 5);
// Reverse the byte order.
std::reverse(ptr, ptr + 8); // Can bit shift here instead
可能不是有史以来最好的字节交换(位移更快)。我的逻辑可能不适合抵消,但沿着这些思路的东西应该有效。
您可能想要做的另一件事是在移位之前转换每个字节,因为您将其留给编译器来确定数据类型*(mBuffer + offset)
是字符(我相信),因此您可能希望将其转换为更大的类型static_cast<uint64_t>(*(mBuffer + offset)) << 32
或其他东西.