程序处理大端小端
『壹』 如何判断CPU是大端模式还是小端模式
大端模式和小端模式与处理器没关系,是编译器的怎么处理的。看看编译器的设置里面,一般都有相关的选项,即使编译器没有选项供选择,编译器的说明书中也会介绍。
想测试的话,最简单的是做个小程序,定义一个整形或长整形的变量,从调试环境中看一下这个变量就知道了。
『贰』 用宏判断计算机处理器是大端字节序(Big-Endian)还是小端字节序(Little-Endian)
实现同样的功能,我们来看看Linux 操作系统中相关的源代码是怎么做的:
static union { char c[4]; unsigned long mylong; } endian_test = {{ 'l', '?', '?', 'b' } };
#define ENDIANNESS ((char)endian_test.mylong)
Linux 的内核作者们仅仅用一个union 变量和一个简单的宏定义就实现了一大段代码同样的功能!由以上一段代码我们可以深刻领会到Linux 源代码的精妙之处!(如果ENDIANNESS=’l’表示系统为little endian,
为’b’表示big endian )
http://blog.chinaunix.net/uid-25367385-id-188322.html
『叁』 如何写程序判断自己电脑是大端字节序还是小端字节序
java编译后.class文件是二进制字节码,而不是系统能识别的机器码,所以直接运行.class文件,系统不能识别,而Java为了解决这个问题,采用一个中间转换过程,必须要把.class文件,转换成对应操作系统所能识别的机器码。 于是把这个转换的任务交给了JVM(java虚拟机),所以只要安装虚拟机的操作系统就能运行Java开发的程序,而不管你用的什么操作系统,因为转换工作是由虚拟机来帮你完成的。 举个例子:假如:你(相当于Java程序)和美国人(一种操作系统)谈话,而你不懂英语,美国人不懂汉语,怎么办呢?你会想到找个翻译(Java虚拟机),把你说的话翻译成英语。 这个时候你又和一
『肆』 c语言 判断大端小端,怎么判断
#include<stdio.h>
int check()
{
union check
{
int i;
char ch;
}c;
c.i =1;
return (c.ch == 1);
}
int main()
{
int ret;
ret = check();
if(ret == 0)
{
printf("Big\n");
}
else
{
printf("little\n");
}
return 0;
}
联合体中 变量i 和ch共用同一地址空内间,它们都是从低容地址开始存放。变量i的值为0x00 00 00 01, 如果是小端模式则01在低地址上,ch的值如果为01则是小端模式,否则是大端模式。
『伍』 如何用最简单的程序判断大小端问题
#include<stdio.h>
unionutype
{
inti;
chara;
};
voidmain()
{
unionutypeu;
u.i=1;
if(u.a)
printf("小端 ");
else
printf("大端 ");
}
『陆』 C语言 编写一个程序确定机器是大端法还是小端法机器
大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地专址中,这样的属存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。
下面这段代码可以用来确定机器是大端法还是小端法机器:
short x;
char x0;
x=0x1122;
x0=((char*)&x)[0]; //低地址单元
if(x0==0x11)printf("大端\n");
else printf("小端\n");
『柒』 用c语言写个函数测试处理器是大端还是小端程序怎么写
写一个函数判断系统是大端还是小端。若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1.
大端格式:在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中
小端格式:与大端存储格式相反,在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节
联合体union的存放顺序是所有成员都从低地址开始存放。
Int checkCPU ()
{
Union w
{
Int a;
Char b;
}c;
c.a=1;
return (c.b==1);
}
UNIX 网络编程第一卷 78页 (英文版)给出了这样一段代码:
PS: 下面代码中的unp.h是Stevens 老大自己定义的一个头文件,具体的代码在这本书的附录里有给出来.
代码
1
2 #include "unp.h"
3
4 int main(int argc ,char ** argv)
5 {
6
7 union {
8 short s;
9 char c[sizeof(short)];
10 }un;
11 un.s = 0x0102;
12 printf("%s\n",CPU_VENDOR_OS);
13
14 if(sizeof(short) == 2)
15 {
16 if(un.c[0] == 1 && un.c[1] ==2 )
17 printf("big-endian\n");
18 else if (un.c[0] == 2 && un.c[1] == 1)
19 printf("little-endian\n");
20 else printf("unknow");
21 }else
22 printf ( "sizeof(short) = %d\n",sizeof(short));
23 exit(0);
24 }
25