[英]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)轉換函數。 收到后,您需要使用ntohl
和ntohs
函數將網絡轉換為主機順序。 字節放在數組中的順序取決於將它們放入內存的方式。 如果將它們作為四個單獨的短字節放置,則將省略字節順序轉換。 您可以使用char
類型進行此類原始字節操作。
您的系統將數字存儲為Little Endians
Windows將數據保持為“小端”,因此字節相反。 有關詳細信息,請參閱Endiannes 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.