簡體   English   中英

對Htonl輸出感到困惑

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM