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结构的填写等处),另外一部分本身已经包含相关处理,就可以不用加。