将原始数据写入文件时将变量更改为网络顺序

时间:2014-09-04 14:43:45

标签: c++ networking

我正在使用一个文件来存储一个struct,我只是将原始数据写入它,将变量转换为char *并将它们的地址传递给write

virtual void write(ostream& os){
 UINT loTmpVal = value();
 os.write((char*)&loTmpVal, sizeof(loTmpVal));
}

我想知道我是否应该使用hton转换来将字节顺序更改为网络顺序。

P.S。当然我会用一个简单的读取来逐个获取变量。

3 个答案:

答案 0 :(得分:0)

没有强制执行,但这是一个好主意。就像为所有客户选择单个字节顺序一样好。在你坚持不懈的情况下,它是LSB还是MSB并不重要。

但是,如果您选择在发送时使用hton(),则必须在接收时使用ntoh()

答案 1 :(得分:0)

何时使用特定的字节顺序:

  • 不同的机器可能会读/写同一个文件
  • 任何时候将数据传输到另一台机器

何时使用本机字节顺序:

  • 数据读/写总是在同一台机器上完成

使用本机字节顺序可以简化代码(您可以一次读取/写入整个结构)

使用特定的字节顺序(例如网络字节顺序)可以分配工作负载并共享数据。如果这可能是未来的用例,那么最好以这种方式开始。

答案 2 :(得分:0)

如果数据始终在同一台计算机上使用,则执行hton()只会降低速度。

但“总是在同一台机器上使用”是未来的预测,也许您的代码或数据将在未曾计划的情况下使用。

进一步“可能减慢速度”是过早的优化,即使对于需要逆转订单的机器,成本也可以忽略不计。

建议:

  1. 使用网络订单

    或者如果它减慢了很多东西:

  2. 在文件顶部包含信息,以指示使用的字节序和整数大小。 .tif files使用了这种方法。