整理網路位元組序

2021-06-26 08:53:48 字數 2594 閱讀 7463

接觸網路了。所以去理解了一下,整形數字在網路中是如何傳輸的。

其中,ntohl,htonl,ntohs,htons。這四個是基本的庫函式。但是有時候我們常常要傳送float,double,和__int64的型別。

所以,去檢視了一些關於他們的轉換關係。基本也是和基本庫函式是一樣的,就是大小端問題。**下:

轉化為float型別。

float htonf(float

f)unsigned

char *p, p0, p1;

if(htons(1) ==1) return

f;p =(unsigned

char *)&f;

p0 =p[0];

p1 =p[1];

p[0] =p[3];

p[3] =p0;

p[1] =p[2];

p[2] =p1;

return

f;float

ntohf(float

f)unsigned

char *p, p0, p1;

if(ntohs(1) ==1) return

f;p =(unsigned

char *)&f;

p0 =p[0];

p1 =p[1];

p[0] =p[3];

p[3] =p0;

p[1] =p[2];

p[2] =p1;

return

f;}或者

(float)htonf(float)

轉化為double型別。

double

htonf(double

d)unsigned

char *p, p0, p1, p2, p3;

if(htons(1) ==1) return

d;p =(unsigned

char *)&d;

p0 =p[0];

p1 =p[1];

p2 =p[2];

p3 =p[3];

p[0] =p[7];

p[7] =p0;

p[1] =p[6];

p[6] =p1;

p[2] =p[5];

p[5] =p2;

p[3] =p[4];

p[4] =p3;

return

d;double

ntohf(double

d)unsigned

char *p, p0, p1, p2, p3;

if(ntohs(1) ==1) return

d;p =(unsigned

char *)&d;

p0 =p[0];

p1 =p[1];

p2 =p[2];

p3 =p[3];

p[0] =p[7];

p[7] =p0;

p[1] =p[6];

p[6] =p1;

p[2] =p[5];

p[5] =p2;

p[3] =p[4];

p[4] =p3;

return

d;或者

(double)htonf(double)

轉化為__int64型別。

unsigned

__int64

hton64i(unsigned

__int64

d)unsigned

char *p, p0, p1, p2, p3;

if(htons(1) ==1) return

d;p =(unsigned

char *)&d;

p0 =p[0];

p1 =p[1];

p2 =p[2];

p3 =p[3];

p[0] =p[7];

p[7] =p0;

p[1] =p[6];

p[6] =p1;

p[2] =p[5];

p[5] =p2;

p[3] =p[4];

p[4] =p3;

return

d;unsigned

__int64

ntoh64i(unsigned

__int64

d)unsigned

char *p, p0, p1, p2, p3;

if(ntohs(1) ==1) return

d;p =(unsigned

char *)&d;

p0 =p[0];

p1 =p[1];

p2 =p[2];

p3 =p[3];

p[0] =p[7];

p[7] =p0;

p[1] =p[6];

p[6] =p1;

p[2] =p[5];

p[5] =p2;

p[3] =p[4];

p[4] =p3;

returnd;

以上是一些轉化的情況。

但是不一定是正確的,正確的改寫。應該需要根據你當前系統對各型別的占用位元組數來調整,但是原理是不變的(大小端)。

ps:在ios8中,系統有64位系統,int所佔位元組數為8位。而在以前的系統中,只有32位系統,int所佔位元組數就位4位

位元組序和網路位元組序

1 位元組序 由於不同的計算機系統採用不同的位元組序儲存資料,同樣乙個4位元組的32位整數,在記憶體中儲存的方式就不同.位元組序分為小尾位元組序 little endian 和大尾位元組序 big endian intel處理器大多數使用小尾位元組序,motorola處理器大多數使用大尾 big e...

位元組序和網路位元組序

1位元組序 由於不同的計算機系統採用不同的位元組序儲存資料,同樣乙個4位元組的32位整數,在記憶體中儲存的方式就不同.位元組序分為小尾位元組序 little endian 和大尾位元組序 big endian intel處理器大多數使用小尾位元組序,motorola處理器大多數使用大尾 big en...

位元組序與網路位元組序

cpu向記憶體儲存資料的方式有2種,這意味著cpu解析資料的方式也分為2種 0x20號 0x21號 0x22號 0x23號 0x12 0x32 0x56 0x78 整數0x12345678,0x12是最高位位元組,0x78是最低位位元組。因此大端中先儲存最高位位元組0x12,小端序儲存方式如下 0x...