大小端字节序的判断
来源:互联网 发布:js取request中的值 编辑:程序博客网 时间:2024/04/25 10:05
最近要重新研究linux网络编程,首先都遇到这个问题,记录复习下吧~
本文转自:http://blog.chinaunix.net/uid-23069658-id-3271110.html
大小端字节序
小端字节序:little-endian,将低字节存放在内存的起始地址;
大端字节序:big-endian,将高字节存放在内存的起始地址。
例如,数字index=0x11223344,在大小端字节序方式下其存储形式为:
上图一目了然的可以看出大小端字节序的区别。
程序实现:
#include <stdio.h>#include <stdlib.h>typedef unsigned char u8;typedef unsigned short u16;typedef unsigned long u32;int main(){ printf("short int=%d,char=%d\r\n",sizeof(short int),sizeof(char)); short int x; char x1,x2; x = 0x1122; x1 = ((char *)&x)[0]; //低地址 x2 = ((char *)&x)[1]; //高地址 printf("x1=%x\n",x1); printf("x2=%x\n",x2); if(x1 ==0x22) { //小端字节序:little-endian,将低字节存放在内存的起始地址; //大部分电脑都是小端模式 printf("小端字节序\n"); }else { //大端字节序:big-endian,将高字节存放在内存的起始地址。 printf("大端字节序\n"); } system("pause"); return 0;}
在windows 32位编译器上,编译结果:
short int=2,char=1
x1=22
x2=11
小端字节序
总结:
网络字节顺序采用big endian方式。
X86系列CPU都是小端little-endian字节序,即低字节存低位,高字节存高位。
补充:
参考《Unix环境编程》,在windows和ubuntu环境下大小端识别均为小端模式。
#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ union{ short s; char c[sizeof(short)]; }un; un.s = 0x0102; if( sizeof(short) == 2) { if(un.c[0] == 1 && un.c[1]== 2) //将低序字节存储在起始地址,为小端字节序 printf("big-endian\n"); else if(un.c[0] == 2 && un.c[1]== 1) //将高序字节地址存储在起始地址,成为大端字节序 printf("little-endian\n"); } else { printf("sizeof(short)= %d\n",sizeof(short)); } return 0;}
阅读全文
0 0
- 大小端字节序的判断
- 大小端字节序的判断
- 大小端字节序的判断
- 大小端字节序判断
- 大小字节端判断
- 字节大小端判断
- 如何简单的判断机器的大小端字节序
- 主机字节序大小端判断
- 用函数判断大小端字节序
- 主机字节序(大小端判断)及网络字节序
- 主机字节序(大小端判断)及网络字节序
- 判断机器大小字节序
- 判断CPU存储字节大小端的两个程序
- 什么是大端字节序?什么是小端字节序?如何用共用体判断机器的大小端?
- 大小端解释判断,网络字节序转换
- 菜鸟学习历程【10】机器字节序、大小端的判断与修改
- C语言 机器字节序、大小端的判断与修改
- 判断上传图片文件的大小(字节)
- 哈希表查找(Java)
- Multiple dex files define Lorg/xmlpull/v1/XmlPullParser
- 基于RPGMakerMV的JavaScript基础-1
- linux 压缩命令集合
- php 异步登陆和退出案列
- 大小端字节序的判断
- highcharts使用之使用数组数据绑定数据
- AndroidStudio SVN按装好后 单击鼠标右键 报错
- 手动创建设备 mknod命令
- SDUT_2119 数据结构实验之链表四:有序链表的归并
- 使用RMAN完成ORACLE自动化备份的过程
- 快速排序--Python
- 一件事情两种态度
- Jenkins~通过WebDeploy实现自动部署