2014-09-04 50 views
0

我用一个文件来存储一个结构到网络秩序,我只是写的原始数据,将其铸造变量为char *并通过他们的地址写变化的变量写原始数据时,提交

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

我想知道我是否应该使用hton convertions来改变网络顺序的字节顺序。

p.s.当然我会用一个简单的读取逐个获取变量。

+1

当数据被不同的机器读取时,使用网络字节顺序来克服endianess问题肯定是个好主意。但是,如果访问数据的不同计算机之间存在其他差异,例如整数大小,它不会让您陷入麻烦。 – alk 2014-09-04 14:49:34

回答

0

这不是强制执行,但是一个好主意。与为所有客户选择单个字节顺序一样好。当你坚持不懈时,它是LSB还是MSB并不重要。

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

0

当使用特定的字节顺序:

  • 不同的机器可读/写的同一个文件
  • 的数据被发送到另一台机器

当使用本机字节的任何时间订购:

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

使用本地字节顺序可以简化代码(你可能读/写一次的整个结构)

使用特定的字节顺序(如网络字节顺序)允许工作负荷被分布和数据分享。如果这可能是未来的用例,那么最好从这种方式开始。

0

如果数据总是在同一台机器上使用,执行hton()只会减慢速度。

但“总是在同一台机器上使用”是未来的预测,也许你的代码或数据将被用于未曾计划的情况。进一步的“可能会减慢速度”是过早的优化,即使对于需要颠倒订单的机器来说,成本也是可以忽略不计的。

建议之一:

  1. 使用网络秩序

    ,或者如果它会减慢速度到了:

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