[C++语法语义探讨] 数值在多个平台上一般怎么传递?

zjumty 2007-05-21
现在做的一个项目,在window上开发,部署到linux服务器上.

选择ACE就是因为其良好的跨平台能力.

但是,有一个问题,我现在比较迷惑,就是数值在怎么通过网络传递啊?

send和recv都是传的char数组,如果要表示一个int或则long,就要用2个char或者4个char.好像不同的操作系统高位和地位表示的不一样,32位和64位的操作系统又不一样. 怎么在不同的操作系统间做到数值传递的自适应性呢?
simohayha 2007-05-22
传递之前统一转化成big-endian或者是little-endian的就可以啊,然后另外一边收到数据在转成本地字节序就可以.

PS:用CDR编码
qiezi 2007-05-24
这几一看unix编程的艺术,他总在强调的就是用文本协议吧,这是最容易扩展最长寿的,性能影响也没有想象的那么严重。
zjumty 2007-05-24
楼上的意思是说,把12345先转换成"12345"然后再传输?
qiezi 2007-05-25
zjumty 写道
楼上的意思是说,把12345先转换成"12345"然后再传输?

是啊,通常瓶颈不会在协议解码编码上,文本协议也容易调试、编写模拟测试、没有字节序的问题,一大堆好处。

如果是二进制协议,还是老老实实地用网络字节序吧,发送前对每个数值调用hton*转成网络字节序,接收了每个数值调用ntoh*转回来。
Global site tag (gtag.js) - Google Analytics