社区
C++ 语言
帖子详情
关于判断endianness
newprom
2009-03-19 01:42:40
网上看到利用
int x = 1;
return (*(char *)&x)
的返回值是否为1进行判断,不太理解,希望xdjm能给个详细的解释,&x的地址是32位吗?(char *)是取它的前八位吗?
...全文
52
1
打赏
收藏
关于判断endianness
网上看到利用int x = 1; return (*(char *)&x)的返回值是否为1进行判断,不太理解,希望xdjm能给个详细的解释,&x的地址是32位吗?(char *)是取它的前八位吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
liumingrong
2009-03-19
打赏
举报
回复
在32位机器上,指针都是32位的,它指向某个内存单元,但是它有类型信息,编译器根据这个类型信息来解释内存单元,
比如&x是int *的,
int占4个字节,那么编译器认为&x开始的4个字节存储了一个int值,怎么存储就分大小端的问题
&x-> c1
c2
c3
c4
(char *)&x 就是强制告诉编译器把&x这个指针看出char* 类型的,就是说这个指针指向一个char,只占用一个字节,
再*(char*)&x取出这个字节的值,显然这个值跟int x的存储方式有关,低端在前它就是1,高端在前就是0
如何
判断
机器的
endian
nes
s
字节层次上 _Bool is_little_
endian
() { int a = 1; char* p = (char*)&a; return *p == 1; } 或 _Bool is_little_
endian
() { union { int a; char b; } u; u.a = 1; return...
C/C++ 通过宏定义
判断
处理器(CPU)大小端字节序。
如果
ENDIAN
NES
S=’l’表示系统为little
endian
,为’b’表示big
endian
。
字节序(
Endian
nes
s)的理解和字符串截取逻辑
问题出在上。当前代码输出3F80 0000(对应1.0f),其实是标准的。而期望的正确结果是0000 803F,这实际上是的结果。在 Windows (x86/x64) 环境下,得到的字节数组是(小端)。当用ToUInt32读取它时,它在内存中代表的就是0x3F800000。接着用"X8"转换,就把低位的0000甩到了右边,变成了3F800000,导致后面的Substring逻辑完全颠倒了。
判断
CPU大小端模式
第一种方法,通过
判断
ENDIAN
NES
S的值是'l' 还是 'b' 1 static union 2 { 3 char c[4]; 4 unsigned long l; 5 }
endian
_test = { {'l','?','?','b'} }; 6 7 #define
ENDIAN
NES
S ( (char)
endian
_test.l ) 第二种方法 static int...
C语言面试题小练——第7天:sizeof、内存思考、大小端
判断
1. 以下为32位操作系统上的C++程序,请计算sizeof的值—— 2. 有关内存的思考题—— 3. 请写一个C函数,若处理器是Big_
endian
的,则返回0;若是Little_
endian
的,则返回1
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章