如果字符串是:
char message[] = "HI THERE";
我该如何获取前四个字节("HI T"
)并将其类型转换为4字节的整数?
总值应等于1411402056
。
答案 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);