【网络编程】大端模式和小端模式(大头序和小头序)
转自:http://my.oschina.net/renhc/blog/37130
大端:多字节值的大端存储在该值的起始位置;(老大站排头为大)
小端:多字节值的小端存储在该值的起始位置;(老小站排头为小)
例如16bit整数:0x0102,其中01即为多字节值的大端,02即为多字节值的小端。
在网络中传输的都是大端序,但具体到某台主机CPU的实现,则有可能是大端序也可能是小端序。一般X86是小端。
那么,如何通过程序来判断当前主机到底是大端还是小端呢?
01
|
/*判断大端还是小端, 1:小端 0:大端*/
|
02
|
int GetEndian()
|
03
|
{
|
04
|
union
|
05
|
{
|
06
|
int a;
|
07
|
char b;
|
08
|
} s;
|
09
|
s.a = 0x0001;
|
10
|
return (1 == s.b);
|
11
|
}
|
联合体union的存放顺序是所有成员都从低地址开始存放,给s.a赋值为0x01,00为a的高端,01为a的低端,如果b==1,即a的低端位于起始位置,即小端,反之为大端。
我觉得《UNIX网络编程》(第一卷)给的例子更严密一些:
01
|
/*判断大端还是小端, 1:小端 0:大端*/
|
02
|
int GetEndian()
|
03
|
{
|
04
|
union
|
05
|
{
|
06
|
short s;
|
07
|
char c[ sizeof ( short )];
|
08
|
}un;
|
09
|
10
|
un.s = 0x0102;
|
11
|
12
|
if (2 == sizeof ( short ))
|
13
|
{
|
14
|
if (1 == un.c[0] && 2 == un.c[1])
|
15
|
{
|
16
|
printf ( "big-endian\n" );
|
17
|
return 0;
|
18
|
}
|
19
|
else if (2 == un.c[0] && 1 == un.c[1])
|
20
|
{
|
21
|
printf ( "little-endian\n" );
|
22
|
return 1;
|
23
|
}
|
24
|
else
|
25
|
{
|
26
|
printf ( "unknown\n" );
|
27
|
}
|
28
|
}
|
29
|
else
|
30
|
{
|
31
|
printf ( "sizeof(short) = %d\n" , sizeof ( short ));
|
32
|
}
|
33
|
34
|
return 0;
|
35
|
}
|
【网络编程】大端模式和小端模式(大头序和小头序)相关推荐
- 【网络编程】大端模式和小端模式
这本来是很easy的东东,不过今天看到一段判断主机是大端模式还是小端模式的例子,和以前的常见的例子略有不同,更严密一些,故note一下: 大端:多字节值的大端存储在该值的起始位置:(老大站排头为大) ...
- 【Linux网络编程】大端模式和小端模式
00. 目录 文章目录 00. 目录 01. 概述 02. 示例分析 03. 优缺点 04. 数组存储 05. 测试机器模式 07. 附录 01. 概述 大端模式(Big-endian):高位字节排放 ...
- 网络通信之 字节序转换原理与网络字节序、大端和小端模式
一.在进行网络通信时是否需要进行字节序转换? 相同字节序的平台在进行网络通信时可以不进行字节序转换,但是跨平台进行网络数据通信时必须进行字节序转换. 原因如下:网络协议规定接收到得第一个字节是高字节, ...
- 大端模式小端模式 主机序网络序
1. 主机序 不同的CPU有不同的字节序类型这些字节序是指整数在内存中保存的顺序,这个叫做主机序.最常见的有两种: 1. Little endian:将低序字节存储在起始地址. 即小端 ...
- 大端模式小端模式、主机序网络序、入栈地址高低问题
一.大端模式&小端模式 所谓的"大端模式",是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把 ...
- 网络通信时字节序转换原理与网络字节序、大端和小端模式 .
引言:在进行网络通信时是否需要进行字节序转换? 相同字节序的平台在进行网络通信时可以不进行字节序转换,但是跨平台进行网络数据通信时必须进行字节序转换.原因如下:网络协议规定接收到得第一个字节是高字节, ...
- C语言高级编程:大端模式和小端模式(Big-Endian和Little-Endian)
大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中. 小端模式(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址 ...
- 大端模式与小端模式的详解分析
大端序与小端序 何为大端序,小端序? 简单点说,就是字节的存储顺序,如果数据都是单字节的,那怎么存储无所谓了,但是对于多字节数据,比如int,double等,就要考虑存储的顺序了.注意字节序是硬件层面 ...
- 大端模式-小端模式详解
大端模式(big endian),小端模式(little endian)指的是什么? 端(endian)模式是指计算机中字节的存储顺序.地址的高低与字节的高位和低位的对应关系就有了大端和小端的区别. ...
最新文章
- confluence mysql 中文乱码_解决confluence的乱码问题
- 云计算设计模式(二十三)——Throttling节流模式
- python自学要多久 知乎-怎么自学python,大概要多久?
- java中的io系统详解(转)
- JVM调优:对象进入老年代的两个条件
- SAP gateway standard mode和compatible mode的区别
- 数据结构与算法:实验一线性表(字符串分类统计)
- Linux磁盘分区/格式化/挂载目录
- ansible基本模块-server
- 《黑客攻防技术宝典:系统实战篇(第2版)》目录
- 搜狗浏览器怎么打开html文件在哪里,搜狗浏览器的文件菜单打开文件在哪
- Existing trial license for IntelliJ IDEA Ultimate 2021.3 is expired
- android 照片裁剪_如何在Android上裁剪和编辑照片
- 记一次git pull 错误
- python公众号文章_Python 抓取微信公众号文章
- 【华人学者风采】徐泽水 四川大学
- Windows dss代理摄像头rtsp流 rtsp摄像头+ffmpeg+vlc
- Oracle数据库打补丁方法
- 数理统计——参数估计的无偏性、有效性以及一致性(相合性)
- Chrome 浏览器有些网站无法保存密码,手动保存