什么时候要进行大小端字节序的转换?
生活随笔
收集整理的這篇文章主要介紹了
什么时候要进行大小端字节序的转换?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
什么時候要進行大小端字節序的轉換??
通過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結構的填寫等處),另外一部分本身已經包含相關處理,就可以不用加。
通過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結構的填寫等處),另外一部分本身已經包含相關處理,就可以不用加。
總結
以上是生活随笔為你收集整理的什么时候要进行大小端字节序的转换?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue组件传值、Vue、组件
- 下一篇: Tailscale组成局域网(以文明6联