我不明白如何将 CHAR“数据”存储到 INT 中。
Since char
是数字类型,将它们组合成一个没有问题int
.
由于它接收存储在 BYTE 中的 24 个整数信息
它是 24 位,而不是字节,因此只需组合三个整数值。
在不使用条件的情况下产生相同结果的更简单方法如下:
int interpret24bitAsInt32(byte[] byteArray) {
return (
(byteArray[0] << 24)
| (byteArray[1] << 16)
| (byteArray[2] << 8)
) >> 8;
}
这个想法是将作为输入提供的三个字节存储到upper四字节中的三个字节int
,然后向下移动一个字节。这样程序会自动对您的号码进行符号扩展,从而避免条件执行。
便携性注意事项:此代码不可移植,因为它假定 32 位整数大小。为了使其便于携带使用<cstdint> types:
int32_t interpret24bitAsInt32(const std::array<uint8_t,3> byteArray) {
return (
(const_cast<int32_t>(byteArray[0]) << 24)
| (const_cast<int32_t>(byteArray[1]) << 16)
| (const_cast<int32_t>(byteArray[2]) << 8)
) >> 8;
}
它还假设 24 位数字的最高有效字节存储在byteArray
,然后是中间元素,最后是最低有效字节。
符号扩展注意事项:此代码通过在高三个字节中构造值然后将其向右移动来自动处理符号扩展,而不是立即在低三个字节中构造值。这个额外的移位操作确保 C++ 为我们处理结果的符号扩展。