将整数解释为字节数组的安全性

时间:2019-04-06 06:30:43

标签: c++ ios endianness

我正在使用二进制安全序列化方法在客户端和服务器之间传输数据。而且都保证都是小端的。

不是将int64_t值转换为字符串,而是将其重新解释为二进制字符串以进行传输...然后在到达时返回到int64_t,是否安全?

在客户端上。

int64_t timeValue = 1554532128;
std::basic_string<char> timeString((const char *)timeValue, sizeof(int64_t));

然后在服务器上。

std::basic_string<char> timeString;
int64_t timeValue = (int64_t)(*timeString.data());

1 个答案:

答案 0 :(得分:2)

使用char*指针访问变量的原始字节是安全的,C ++标准对此有规定。但是,无论如何,您都无法正确转换值。代码需要看起来像这样:

int64_t timeValue = ...;
std::string timeString(reinterpret_cast<char*>(&timeValue), sizeof(int64_t));

std::string timeString = ...;
//assert(timeString.size() == sizeof(int64_t));
int64_t timeValue = *reinterpret_cast<int64_t*>(timeString.data());