如果我的理解正确,我正在寻求确认,如果有更优雅的方法,我可能会寻求信息。
我找到了几个答案,但我认为在签名方面它们是错误的。
常见的情况是,例如,您通过串行端口接收数据。您将获得一系列char值。在这种情况下,我有4个值的数组。它们代表4个字节的数字。
char a[] {-103,-103,-103,-103};
我想将32位未加编码的小端字节序转换为平台的无符号32位值:
uint32_t p = static_cast<uint32_t>(
static_cast<uint8_t>(a[0]) | static_cast<uint8_t>(a[1])<<8 |
static_cast<uint8_t>(a[2])<<16 | static_cast<uint8_t>(a[3])<<24 );
uint32_t q = static_cast<uint32_t>(
static_cast<uint8_t>(a[0]) + 256U*static_cast<uint8_t>(a[1]) +
65536U*static_cast<uint8_t>(a[2]) + 16777216U*static_cast<uint8_t>(a[3]) );
断言是否正确?
这是将32位带符号小数点字节序转换为平台的带符号32位值:
int q = static_cast<uint8_t>(a[0]) + 256U*static_cast<uint8_t>(a[1]) +
65536U*static_cast<uint8_t>(a[2]) + 16777216U*a[3];
请注意,最后一个值未转换为无符号字符以保留符号。