[英]Confused about htonl output
我有一個簡單的問題。 這段代碼:
int t = 1;
int y = htonl(t);
printf("Y = %d, sizeof(int)=%d", y, sizeof(int));
版畫
Y = 16777216, sizeof(int)=4
在小端計算機上(實際上是在線編譯器)。
我期望y
是數字(二進制):1000 .... 000(0-31次)。
但是16777216的1旁邊只有25個零(二進制)。
我錯過了什么?
int t = 1;
內存(用於4字節系統)以這種方式顯示
---------------
| 0 | 0 | 0 | 1 |
---------------
^ ^
| byte | = 0x1 = 00000001 in binary
二進制格式為
00000000 00000000 00000000 00000001
如果您的系統是小端系統,則htonl()
允許反轉字節
因此htonl(t)
將返回:
---------------
| 1 | 0 | 0 | 0 |
---------------
^
| = 0x1 = 00000001 in binary
所以二進制的整個htonl(t)
是
00000001 00000000 00000000 00000000
等於十進制的16777216
它確實符合您的要求。
您的十六進制輸出為01 00 00 00
。 小尾數上的htonl
交換字節而不是位。
16777216 = 0x01000000
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.