大小端模式完全剖析
来源:互联网 发布:nginx怎么配置ssl证书 编辑:程序博客网 时间:2024/05/21 23:26
小端模式:高位在高地址,低位在低地址(简单记为:高高低低)
大端模式:高在低,低在高
一般来说,Intel芯片都是小端模式的,我的电脑用的是Intel的CPU, 对于整数0x12345678, 其在内存中的排列为:
#include <iostream>using namespace std;int main(){int n = 0x12345678;int *p = &n;char *q = (char *)p;printf("%x %p\n", *q, q);printf("%x %p\n", *(q + 1), q + 1);printf("%x %p\n", *(q + 2), q + 2);printf("%x %p\n", *(q + 3), q + 3); return 0;}
结果:
78 0013FF7C
56 0013FF7D
34 0013FF7E
12 0013FF7F
那么, 我们该如何判断大小端呢? 下面, 给出一个最简单的程序:
#include <iostream>using namespace std;bool isLittleEndian(){int n = 0x01020304;char *p = (char *)&n;if(4 == *p){return true;}return false;}int main(){if(isLittleEndian()){cout << "little endian" << endl;}else{cout << "big endian" << endl;}return 0;}
当然, 有的书上用了共用体, 其实也是可以的。
想法1:最近, 突然想到tcp/ip网络通信时, 就是用的大端字节序, 那么是否可以用if(htonl(n) == n)来验证大小端系统呢? 我认为是可以的。
想法2:另外, 下面程序可否验证大小端系统呢?
#include <iostream>using namespace std;bool isLittleEndian(){int n = 0x01020304;char c = n;if(4 == c){return true;}return false;}int main(){if(isLittleEndian()){cout << "little endian" << endl;}else{cout << "big endian" << endl;}return 0;}我认为是不可以的, char c = n;的转换应该是跟大小端无关的。
哪里去搞个大端系统呢? 有大端系统的朋友, 帮我验证一下啊。
- 大小端模式完全剖析
- 单例模式完全剖析
- 单例模式完全剖析
- 单例模式完全剖析
- 单例模式完全剖析
- 单例模式完全剖析
- 单例模式完全剖析
- 单例模式完全剖析
- 单例模式完全剖析
- 单例模式完全剖析
- 单例模式完全剖析
- 单例模式完全剖析
- 单例模式完全剖析
- 单例模式完全剖析
- 单例模式完全剖析
- 单例模式完全剖析
- 单例模式完全剖析
- 《C语言深度剖析》:大小端模式判断
- 50条学习C++建议
- SKG多功能料理机评测
- 远程桌面登录端口号
- c#的owner
- SKG多功能料理机评测
- 大小端模式完全剖析
- SKG多功能料理机评测
- 解决Win7 Android SDK Manager不能连接下载的问题
- APK权限大全
- php上传apk后自动提取apk包的信息
- JS中使用java方法与数据库交互
- There is a problem with the configuration server. (/usr/libexec/gconf-sanity-check-2 exite
- 关于产品的一些思考——腾讯之搜搜百科
- Plugin.cs (for PS)