我用一个文件来存储一个结构到网络秩序,我只是写的原始数据,将其铸造变量为char *并通过他们的地址写变化的变量写原始数据时,提交
virtual void write(ostream& os){
UINT loTmpVal = value();
os.write((char*)&loTmpVal, sizeof(loTmpVal));
}
我想知道我是否应该使用hton convertions来改变网络顺序的字节顺序。
p.s.当然我会用一个简单的读取逐个获取变量。
我用一个文件来存储一个结构到网络秩序,我只是写的原始数据,将其铸造变量为char *并通过他们的地址写变化的变量写原始数据时,提交
virtual void write(ostream& os){
UINT loTmpVal = value();
os.write((char*)&loTmpVal, sizeof(loTmpVal));
}
我想知道我是否应该使用hton convertions来改变网络顺序的字节顺序。
p.s.当然我会用一个简单的读取逐个获取变量。
这不是强制执行,但是一个好主意。与为所有客户选择单个字节顺序一样好。当你坚持不懈时,它是LSB还是MSB并不重要。
但是,如果您选择在发送时使用hton()
,则您必须在接收时在另一端使用ntoh()
。
当使用特定的字节顺序:
当使用本机字节的任何时间订购:
使用本地字节顺序可以简化代码(你可能读/写一次的整个结构)
使用特定的字节顺序(如网络字节顺序)允许工作负荷被分布和数据分享。如果这可能是未来的用例,那么最好从这种方式开始。
如果数据总是在同一台机器上使用,执行hton()
只会减慢速度。
但“总是在同一台机器上使用”是未来的预测,也许你的代码或数据将被用于未曾计划的情况。进一步的“可能会减慢速度”是过早的优化,即使对于需要颠倒订单的机器来说,成本也是可以忽略不计的。
建议之一:
使用网络秩序
,或者如果它会减慢速度到了:
中包括的文件信息的顶部,指示字节序使用,整数大小。 .tif files使用了这种方法。
当数据被不同的机器读取时,使用网络字节顺序来克服endianess问题肯定是个好主意。但是,如果访问数据的不同计算机之间存在其他差异,例如整数大小,它不会让您陷入麻烦。 – alk 2014-09-04 14:49:34