一个16位整数,由两个字节组成。内存中存储这两个字节有两种方法:一种是将低序字节存储在起始地址,称为little-endian字节序,另一种方法是将高序字节存储在起始地址,称为big-endian字节序。术语little-endian和big-endian表示多字节的哪一端存储在该值的起始地址。
例如:0x0102 little-endian: A 0x02 A+1 0x01
big-endian: A 0x01 A+1 0x02
测试程序:
#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 endian /n"); else printf("Unknow endian /n"); return 0;}
转换(用宏)
typedef unsigned int u32;typedef unsigned short u16;
#define BSWAP_16(x) / ( (((x) & 0x00ff) << 8 ) | / (((x) & 0xff00) >> 8 ) / )#define BSWAP_32(x) / (u32) ( (( ((u32)(x)) & 0xff000000 ) >> 24) | / (( ((u32)(x)) & 0x00ff0000 ) >> 8 ) | / (( ((u32)(x)) & 0x0000ff00 ) << 8 ) | / (( ((u32)(x)) & 0x000000ff ) << 24) / )
转载请注明原文地址: https://ibbs.8miu.com/read-31931.html