簡體   English   中英

為什么輸出看起來像這樣?

[英]Why does the output look like this?

我有下面的ac程序,我想以特定的順序發送一個32位的消息Eg.0x00000001。

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <stdint.h>

struct  test
{
    uint16_t a;
    uint16_t b;
};

int main(int argc, char const *argv[])
{
    char buf[4];
    struct test* ptr=(struct test*)buf;
    ptr->a=0x0000;
    ptr->b=0x0001;
    printf("%x %x\n",buf[0],buf[1]); //output is 0 0
    printf("%x %x\n",buf[2],buf[3]); //output is 1 0
    return 0;
}

然后我通過打印char數組中的值來測試它。 我在上面的評論中得到了輸出。 輸出不應該是0 0和0 1嗎? 既然但[3]是最后一個字節? 我錯過了什么嗎?

謝謝!

導致它的小端。 閱讀: Endianness

要將它們轉換為網絡順序,您必須使用htonl (host-to-network-long)和htons (host-to-network-short)轉換函數。 收到后,您需要使用ntohlntohs函數將網絡轉換為主機順序。 字節放在數組中的順序取決於將它們放入內存的方式。 如果將它們作為四個單獨的短字節放置,則將省略字節順序轉換。 您可以使用char類型進行此類原始字節操作。

您的系統將數字存儲為Little Endians

Windows將數據保持為“小端”,因此字節相反。 有關詳細信息,請參閱Endiannes

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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