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

不是将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());

最佳答案

使用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());

10-06 09:45