两种检测系统字节序的方法。
来源:互联网 发布:linux建立文件命令 编辑:程序博客网 时间:2024/06/07 19:15
下面代码示范了两种检测系统字节序的方法。
第一种方法,使用强制类型转换的方式。C 语言在把占用2个字节的 short 变量强制转换为 char 之后,会把 short 变量的首地址赋给 char 变量,可以根据 char 变量的值判断系统字节序是 大端 还是 小端。
第二种方法,利用 联合类型 的特性。联合类型 共享同一段内存,首地址是相同的。
测试环境:
ubuntu 10.04 amd 64.
第一种方法,使用强制类型转换的方式。C 语言在把占用2个字节的 short 变量强制转换为 char 之后,会把 short 变量的首地址赋给 char 变量,可以根据 char 变量的值判断系统字节序是 大端 还是 小端。
第二种方法,利用 联合类型 的特性。联合类型 共享同一段内存,首地址是相同的。
测试环境:
ubuntu 10.04 amd 64.
标签: 字节序 endianUbuntu
代码片段(2)
[代码] endian.c
01
/*******************
02
* 文件名:endian.c
03
******************/
04
#include <stdio.h>
05
06
/*********************************************************
07
* 使用类型的强制转换实现little-endian与big-endian的判断
08
*********************************************************
09
* 返回值:
10
* 1 表示是小端字节序。
11
* 0 表示不是小端字节序。
12
*********************************************************/
13
int
is_little_endian_a(
void
)
14
{
15
unsigned
short
flag = 0x4321;
16
if
(*(unsigned
char
*)&flag == 0x21)
17
return
1;
18
else
19
return
0;
20
}
21
22
/*********************************************************************************
23
* 利用联合的特点来判断little-endian与big-endian
24
*********************************************************************************
25
* 返回值:
26
* 1 表示是小端字节序。
27
* 0 表示是大端字节序。
28
* -1 表示不能使用这种方法确定字节序。比如有的机器的 short 长度不是 2 。
29
********************************************************************************/
30
int
is_little_endian_b(
void
)
31
{
32
union
endian_un{
33
short
var;
34
char
bits[
sizeof
(
short
)];
35
};
36
37
union
endian_un flag;
38
flag.var=0x0102;
39
40
//判断低位和高位的存储内容,确定是何种方式
41
if
(
sizeof
(
short
) == 2){
42
if
(flag.bits[0] == 1 && flag.bits[1] == 2)
43
return
0;
44
else
if
(flag.bits[0] == 2 && flag.bits[1] == 1)
45
return
1;
46
else
47
return
-1;
48
}
49
50
return
-1;
51
}
52
53
int
main(
void
)
54
{
55
int
type = 0;
56
57
type = is_little_endian_a();
58
if
(1 == type)
59
printf
(
"judged by first method, little-endian\n"
);
60
else
if
(0 == type)
61
printf
(
"judged by first method, big-endian\n"
);
62
63
type = is_little_endian_b();
64
if
(1 == type)
65
printf
(
"judged by second method, little-endian\n"
);
66
else
if
(0 == type)
67
printf
(
"judged by second method, big-endian\n"
);
68
else
69
printf
(
"can't judge it\n"
);
70
71
return
0;
72
}
[图片] 运行截图
转载自:http://www.oschina.net/code/snippet_10896_1306
- 两种检测系统字节序的方法。
- 系统字节序检测的两种方法
- 系统字节序检测的两种方法
- 判断主机字节序的两种方法
- 检测帧速的两种方法
- POWER KEY 的两种检测方法
- 关于入侵检测系统常用的几种检测方法
- 检测网络是否连接的两种方法(C#)
- SQL Server 检测是不是数字型的数据(两种方法)
- HOG+SVM行人检测的两种方法
- iOS两种检测网络状态的方法
- HOG+SVM行人检测的两种方法
- 检测程序是否在虚拟机运行的两种方法
- HOG+SVM行人检测的两种方法
- 两种安装XP系统的方法
- win8系统的两种安装方法
- 获取系统时间的两种方法
- 配置系统环境变量的两种方法
- 辞职
- 简单工厂模式、工厂模式、抽象工厂模式 与反射技术应用
- 2011总结
- SQL Server 2008错误_无法连接到WENTASY-PC/SQLEXPRESS解决
- 软件测试方法
- 两种检测系统字节序的方法。
- StringBuilder和StringBuffer的区别
- 有关项目开发过程中,管理工具的使用等方面的一些文章。
- iphone调用系统电话、浏览器、地图、邮件等
- CHM 文件打开问题剖析
- 第十八周实验报告2
- IP代理 国内代理服务器 国内最全代理 代理服务器列表 国内代理服务器
- 在android C/C++ native编程(ndk)中使用logCat
- 新一年新目标新奋斗新生活