依睛(IT blog) 我回来了,PHP<-->C/C++ LINUX

笨鸟

统计

积分与排名

友情连接

最新评论

什么时候要进行大小端字节序的转换?

dankey
什么时候要进行大小端字节序的转换?

通过socket收发数据(在intel的处理器上),
什么时候要进行大小端字节序的转换?

比如发一个int型的数据出去,要不要进行转换?
还是两端一样,就不用考虑转换了?

2005-6-16 13:50 梅川内酷
什么时候要进行大小端字节序的转换?

intel都是小端,网络上都是大端.
随便找个socket源程序一看便知啊.

2005-6-16 13:53 surfzsl
什么时候要进行大小端字节序的转换?

在不确定的情况下
最好都转换成处和理器一致的字节序

2005-6-16 14:51 黑咖啡不加糖
什么时候要进行大小端字节序的转换?

short 或者 long的数据在进行通信的时候最好养成:
1、发送的时候使用:htons(l)
2、接受的时候使用:ntohs(l)
而不要理会两边的通信是否需要这么做~~
当然了一般我都不用int型的数据通信,从来都是字符串通信,发送方利用sprintf组织,接收方利用atoi进行转换~~

2005-6-16 15:47 deathbravo
什么时候要进行大小端字节序的转换?

说得好,受教了

2005-6-16 15:54 flw
什么时候要进行大小端字节序的转换?

[quote][i]原帖由 "黑咖啡不加糖" 发表:[/i]
short 或者 long的数据在进行通信的时候最好养成:
1、发送的时候使用:htons(l)
2、接受的时候使用:ntohs(l)
而不要理会两边的通信是否需要这么做~~
当然了一般我都不用int型的数据通信,从来都是字符串通..........[/quote]
这个说法是非常正确的。

2005-6-16 15:58 flw
什么时候要进行大小端字节序的转换?

[quote][i]原帖由 "surfzsl" 发表:[/i]
在不确定的情况下
最好都转换成处和理器一致的字节序[/quote]
错了。

2005-6-16 16:18 dankey
什么时候要进行大小端字节序的转换?

那如果一个应用层协议,定义的消息体就是
unsigned int(4个字节);
char[16](16个字节);
像这样的,在发送的时候应该怎么处理?

2005-6-16 16:18 surfzsl
什么时候要进行大小端字节序的转换?

[quote][i]原帖由 "黑咖啡不加糖" 发表:[/i]
short 或者 long的数据在进行通信的时候最好养成:
1、发送的时候使用:htons(l)
2、接受的时候使用:ntohs(l)
而不要理会两边的通信是否需要这么做~~
当然了一般我都不用int型的数据通信,从来都是字符串通..........[/quote]
:em17:  :em17:  :em17:  :em17:
偶也想这么说来着
只是不知道怎么表达清楚
记得在哪本书中看过就是这么说的
:em06:  :em06:  :em06:  :em06:  :em06:

2005-6-16 18:15 mike_chen
什么时候要进行大小端字节序的转换?

用于网络传送时最好都加上,大多数处理器是big Endian,字节顺序同于网络,但有的处理器象space就是little endian,所以为避免出错就都转了把

2005-6-16 18:46 happyall
什么时候要进行大小端字节序的转换?

哇赛,这儿全是高手.我30岁了,刚刚开始学,下次请大家多多指教.

2005-6-16 22:00 mq110
什么时候要进行大小端字节序的转换?

我从一开始就按字符串来交换数据.至今也没出现楼上说的问题.:)

2005-6-16 22:11 newroot_phy
什么时候要进行大小端字节序的转换?

问一下,我记得好像是字符串和结构体不用转换成网络码的吧!!??

2005-6-16 22:19 mq110
什么时候要进行大小端字节序的转换?

只是知道字符串不用..
结构体里也有int类型的.或者其他类型的.

2005-6-17 08:55 双眼皮的猪
什么时候要进行大小端字节序的转换?

[quote][i]原帖由 "mike_chen"]用于网络传送时最好都加上,大多数处理器是big Endian,字节顺序同于网络,但有的处理器象space就是little endian,所以为避免出错就都转了把[/quote 发表:[/i]

一般是little endian,sparc是big endian

2005-6-17 10:22 dengyunze
什么时候要进行大小端字节序的转换?

一般是little endian,sparc是big endian
-----------------------------
正解。

2005-6-17 11:42 cattiger
什么时候要进行大小端字节序的转换?

你这个一般是指什么情况!?什么是一般,你接触到的就是一般吗?
大部分小型机采用big endian,运行的是unix系统,也有一些小型机是little endian 系统,如康柏的vms!intel的处理器是little endian 的,所以windows是little endian系统。 是什么字续,主要取决与处理器的处理顺序!
楼上的一般是否可以理解为用intel处理器的机器

2005-6-17 11:45 b46
什么时候要进行大小端字节序的转换?

哈哈

2005-6-17 12:25 narkissos
什么时候要进行大小端字节序的转换?

一般说来,在通信软件中,考虑大小尾是一个非常正规且严谨的做法,我们不能假定所有的通信都在同一种体系结构下工作。
一般来说,除了intel 80x86系列处理器是小尾架构,绝大部分处理器均为大尾架构,如sparc系列/power系列/moto的68系列等。网络字节顺序也是大尾的。
在编解码时,尤其需要注意大小尾问题。在每处使用超过一个byte的地方,最好使用转换函数(hton*和ntoh*系列或自写均可)
所以,当你的通信软件要和其他机器上的通信软件(模块)通信时,凡是编解码等地方使用了超过1个字节的数据类型,都最好使用转换函数。在部分socket处理中,也需要加上转换函数(如ipaddr结构的填写等处),另外一部分本身已经包含相关处理,就可以不用加。

posted on 2008-01-22 12:06 向左向右走 阅读(5337) 评论(0)  编辑 收藏 引用 所属分类: C/C++学习资料库

只有注册用户登录后才能发表评论。