当前位置: 技术问答>linux和unix
linux 大端小端 理解
来源: 互联网 发布时间:2016-10-08
本文导语: hi all: 在arch/arm/kernel/Setup.c中有这样一段 static union { char c[4]; unsigned long l; } endian_test __initdata = { { 'l', '?', '?', 'b' } }; #define ENDIANNESS ((char)endian_test.l) 其中__initdata指定了数据存放的section include/linux/Init.h #...
hi all:
在arch/arm/kernel/Setup.c中有这样一段
static union { char c[4]; unsigned long l; } endian_test __initdata = { { 'l', '?', '?', 'b' } };
#define ENDIANNESS ((char)endian_test.l)
其中__initdata指定了数据存放的section
include/linux/Init.h
#define __initdata __attribute__ ((__section__ (".init.data")))
这个是如何做到大小端判断的啊?
我实在是理解不了。。。
在arch/arm/kernel/Setup.c中有这样一段
static union { char c[4]; unsigned long l; } endian_test __initdata = { { 'l', '?', '?', 'b' } };
#define ENDIANNESS ((char)endian_test.l)
其中__initdata指定了数据存放的section
include/linux/Init.h
#define __initdata __attribute__ ((__section__ (".init.data")))
这个是如何做到大小端判断的啊?
我实在是理解不了。。。
|
联合体union的存放顺序是所有成员都从低地址开始存放,利用该特性就可以轻松地获得了
CPU对内存采用Little-endian还是Big-endian模式读写。
给出c代码,linux其实也差不了多少
#include
using namespace std;
/*
** 声明联合体
*/
union Judge
{
short s;
char ch[sizeof(short)];
};
Judge flag; /* 联合体对象*/
int main()
{
flag.s = 0x0102; /* 放两个数 1 2*/
if ( sizeof(short) !=2 )
{
cout
CPU对内存采用Little-endian还是Big-endian模式读写。
给出c代码,linux其实也差不了多少
#include
using namespace std;
/*
** 声明联合体
*/
union Judge
{
short s;
char ch[sizeof(short)];
};
Judge flag; /* 联合体对象*/
int main()
{
flag.s = 0x0102; /* 放两个数 1 2*/
if ( sizeof(short) !=2 )
{
cout