欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2281|回復: 0
打印 上一主題 下一主題
收起左側

字節存放順序:大尾,小尾

[復制鏈接]
跳轉到指定樓層
樓主
ID:107189 發表于 2016-3-5 17:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
   字節存放有大尾和小尾之分。如果對應數據的高字節存放在低地址就是大尾,反之,高字節存放在高地址的就是小尾。
比如 short int a = 0x1234

大尾存放時:
偏移地址      存放內容
0x0000       0x12
0x0001       0x34

小尾存放:
偏移地址      存放內容
0x0000       0x34
0x0001       0x12

同樣的如果數據是32位、64位也就是可以類推。
判斷一個機器是大尾還是小尾我們可以通過程序進行測試:


#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    short int a = 0x1234;
    char *p = (char *)&a;

    printf("p=%#hhx\n", *p);

    if (*p == 0x34) {
        printf("little endian\n");   
    } else if (*p == 0x12) {
        printf("big endia\n");   
    } else {
        printf("unknown endia\n");   
    }
    return 0;
}
在網絡上傳輸數據我們采用的都是大尾。這就存在字節順序的相互轉換。
下面定義一個宏可以對16位數據進行字節轉換


#define sw16(x) \
    ((short)( \
        (((short)(x) & (short)0x00ffU) << 8 ) | \
        (((short)(x) & (short)0xff00U) >> 8 ) ))
假設這里x=0xaabb
(short)(x) & (short)0x00ffU  這里的與操作將16位數據x的高8位置為0得到0x00bb,然后在左移8位就得到了0xbb00
同理(short)(x) & (short)0xff00U >> 8 就得到了 0x00aa
最后將0xbb00 和 0x00aa 進行或運算就實現了高字節和低字節的相會交換。
   
   關于字節順序的交換我們可以參考include/linux/byteorder/ 下的文件swab.h和swabb.h中的定義

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表