我正在使用二进制安全序列化方法在客户端和服务器之间传输数据。并且两者都保证为小端。
不是将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());