我正在使用一个文件来存储一个struct,我只是将原始数据写入它,将变量转换为char *并将它们的地址传递给write
virtual void write(ostream& os){
UINT loTmpVal = value();
os.write((char*)&loTmpVal, sizeof(loTmpVal));
}
我想知道我是否应该使用hton转换来将字节顺序更改为网络顺序。
P.S。当然我会用一个简单的读取来逐个获取变量。
答案 0 :(得分:0)
没有强制执行,但这是一个好主意。就像为所有客户选择单个字节顺序一样好。在你坚持不懈的情况下,它是LSB还是MSB并不重要。
但是,如果您选择在发送时使用hton()
,则必须在接收时使用ntoh()
。
答案 1 :(得分:0)
何时使用特定的字节顺序:
何时使用本机字节顺序:
使用本机字节顺序可以简化代码(您可以一次读取/写入整个结构)
使用特定的字节顺序(例如网络字节顺序)可以分配工作负载并共享数据。如果这可能是未来的用例,那么最好以这种方式开始。
答案 2 :(得分:0)
如果数据始终在同一台计算机上使用,则执行hton()
只会降低速度。
但“总是在同一台机器上使用”是未来的预测,也许您的代码或数据将在未曾计划的情况下使用。
进一步“可能减慢速度”是过早的优化,即使对于需要逆转订单的机器,成本也可以忽略不计。
建议:
使用网络订单
或者如果它减慢了很多东西:
在文件顶部包含信息,以指示使用的字节序和整数大小。 .tif files使用了这种方法。