- 论坛徽章:
- 1
|
原帖由 路小佳 于 2007-3-23 10:20 发表
谢谢指教, 希望有机会用到。
另外顺便再问一个问题,关于在网络上传输struct的问题,虽然许多代码里是直接send的, 当然这些结构都已经 #pragma pack(1)过了,但是仍有大小端的问题, 序列化的话似乎有点浪费CPU ...
呵呵,这个我想你没搞明白。
pack(1) 和大小端是两个概念,相互之间一点儿概念都没有。
pack(1) 是为了防止编译器优化时填充一些多余的字节进去,
而大端小端根本不是传输的问题,而是协议的内容。
你传送一个整数,用大端,而对方接收到这个整数之后,当小端去理解,那就出问题了。
解决的方法就是都用大端或者都用小端,但是到底该都用大端呢?还是该都用小端呢?
这个问题不可能每次制订协议的都去考虑一遍,也不可能由某一方说了算(合作是对等的,凭啥是你说了算),
应该由一个第三方的组织来提出,于是便有了“网络字节序”这一说,实际上网络字节序就是大端,但是我们不需要去关心这个,
只需要在发送前用 hton(s|l) 转换一下,接收后用 ntoh(s|l) 转换一下,就可以了。这个和 pack(1) 一点儿关系都没有。
以上是一般的性的概念。
至于你说的序列化会浪费 CPU,那根本就是杞人忧天,金融软件的一大特点就是稳定性高于效率,硬件配置也很高,
所以说事实上银行的协议基本上都是基于文本的。 |
|