当前位置: 技术问答>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
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!