接觸網路了。所以去理解了一下,整形數字在網路中是如何傳輸的。
其中,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...