【CPU】判断机器大小端的两种实现方法
大端模式(Big-endian):
是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址
中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
小端模式(Little-endian):
是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中,和我们的逻辑方法一致。
判断大小端方法:1、利用指针强制类型转换; 2、利用共用体所有数据共用同一块地址空间
1、利用指针强制类型转换
1 #include<stdio.h> 2 int main() 3 { 4 int a = 1; 5 char * p = (char*)&a; 6 if (*p == 1) 7 { 8 printf("little-endian\n"); 9 } 10 else 11 { 12 printf("big-endian\n"); 13 } 14 return 0; 15 }
如果小端方式中(i占至少两个字节的长度)则i所分配的内存最小地址那个字节中就存着1,其他字节是0;大端的话则1在i的最高地址字节处存放。char是一个字节,所以强制将char型量p指向i则p指向的一定是i的最低地址,那么就可以判断p中的值是不是1来确定是不是小端。
2、利用共用体所有数据共用同一块地址空间
1 #include<stdio.h> 2 union A 3 { 4 char c; 5 int a; 6 }A; 7 int main() 8 { 9 A.a= 1; 10 if (A.c == 1) 11 { 12 printf("little-endian\n"); 13 } 14 else 15 { 16 printf("big-endian\n"); 17 } 18 return 0; 19 }
联合体union的存放顺序是所有成员都从低地址开始存放,所以很容易就判别出机器的大小端了。 ^_^
【出处】
再牛逼的梦想也架不住傻逼似的坚持
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧