将四个字节转换为一个4字节的int

时间:2020-02-24 23:45:12

标签: c++ casting byte

如果字符串是:

char message[] = "HI THERE";

我该如何获取前四个字节("HI T")并将其类型转换为4字节的整数?

总值应等于1411402056

2 个答案:

答案 0 :(得分:1)

最简单的方法是:

int32_t num = *reinterpret_cast<int32_t*>(message);

但这在技术上违反了严格别名。一种更安全的方法是:

int32_t num;
memcpy(&num, message, sizeof(num));

但是,为了真正安全,您应该使用Alan Birtles的答案中所述的移位方法。

之后,您可能必须交换int字节的顺序,具体取决于系统的字节序。

答案 1 :(得分:1)

始终有效的安全方法是仅逐个移动每个字节:

uint32_t i = (uint8_t(message[0]) << 24) | (uint8_t(message[1]) << 16) | (uint8_t(message[2]) << 8) | uint8_t(message[3]);

根据字符串的字节序,您可能需要反转字节顺序。

根据与您的处理器的字节性匹配的字符串的字节性,字符串是否与正确的字节边界对齐等,您还可以简单地将强制转换重新解释为整数:

Int i = *reinterpret_cast<int*>(message);
相关问题