【网络编程】大端模式和小端模式(大头序和小头序)
来源:互联网 发布:淘宝新店铺转让价格表 编辑:程序博客网 时间:2024/04/29 07:15
转自: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
}
0 0
- 【网络编程】大端模式和小端模式(大头序和小头序)
- 《unix网络编程》(6)网络字节序 大端模式和小端模式
- 【网络编程】大端模式和小端模式
- 网络字节序、大端和小端模式
- 大头小头 字节序
- 大头小头 字节序
- 大头小头字节序
- 大头小头 字节序
- 大头小头 字节序
- 大端模式、小端模式和网络字节顺序【转】
- 字节序--大端模式和小端模式
- 网络通信时字节序转换原理与网络字节序、大端和小端模式
- 网络通信时字节序转换原理与网络字节序、大端和小端模式
- 网络通信时字节序转换原理与网络字节序、大端和小端模式 .
- 网络通信时字节序转换原理与网络字节序、大端和小端模式
- 网络通信时字节序转换原理与网络字节序、大端和小端模式
- 网络通信之 字节序转换原理与网络字节序、大端和小端模式
- 网络通信之 字节序转换原理与网络字节序、大端和小端模式
- MySQL学习笔记 2 - 基本操作
- cocos2d-x & CocoStudio UI使用
- 生命과 天性 天性의 組織 (韓長庚 易學原理總論)
- 在广州传智播客学Java可以学习云计算
- JDBC的项目开发实例<轻量级封装>
- 【网络编程】大端模式和小端模式(大头序和小头序)
- 一种接口统一返回值的设计方法
- 《SAS应用统计》学习笔记[描述统计]
- 天性의 生成 (韓長庚 易學原理總論)
- 先进的技术,落后的应用
- tesseract-ocr 使用简介
- 各种哈希函数及代码
- 黑马程序员—高新技术:Reflect反射
- GC之--HotSpot VM GC 的种类