机器字节存储有大端小端模式之分
大端模式与小端模式
大端模式(Big-endian)是指数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中.
小端模式(little-endian)是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。
一般涉及到网络编程的时候可能涉及到数据大小端的转换问题,因TCP/IP协议规定了在网络上必须采用网络字节顺序(也就是大端模式,UDP/TCP/IP协议规定:把接收到的第一个字节当作高位字节看待)。
当前机器是大端还是小端模式,我们可以用一个简单的代码来测试出来,参考如下:
#include <stdlib.h> #include <stdio.h> #include <string.h> int main(int argc , const char **arv) { unsigned int val = 0x12345678; unsigned char *p = (unsigned char *)&val; if(p[0] > p[3]) { printf("little-endian: val=0x%x uchar_val[0]=0x%x, uchar_val[3]= 0x%x ",val, p[0],p[3]); } else printf("big-endian: val=0x%x uchar_val[0]=0x%x, uchar_val[3]= 0x%x ",val, p[0],p[3]); return 0; }