大小端字节序的判断
来源:互联网 发布:visio 2016 mac破解版 编辑:程序博客网 时间:2024/03/28 19:01
/*********
* 环境:vc++6.0
**********************/
用union实现大小端字节序:
/******************** * union大小字节端 ********************/union test{short i;char str[sizeof(short)];}tt;void main(){tt.i = 0x0102;if(sizeof(short) == 2){if(tt.str[0] == 1 && tt.str[1] == 2)printf("大端字节序");else if(tt.str[0] = 2 && tt.str[1] == 1)printf("小端字节序");elseprintf("结果未知"); }elseprintf("sizof(short)=%d,不等于2",sizeof(short));}
看完上面用union测试大小字节端,那么用struct可不可以呢,一开始,我写了一下代码,结果出乎我的意料
struct test{short i;}tt;void main(){printf("%d\n", &tt.i);printf("%d\n", &tt.i + 1);}
运行结果:
4424874
4424876
我之前满以为结果是4424874和4424845;但是实际的结果却不是,一开始迷糊了一下,后来知道原来&&tt.i+1中不是地址+1个字节,实际上+2个字节,因为i是short型,所以编译器编译后实际上是+sizeof(short)也就是+2,所以代码中的地址+1,不一定是你想像中的那样内存地址+1,要视变量的类型而定。
但是,是不是struct就不可以用来判断大小端字节序了呢?请看下面的:
/******************** * struct大小字节端 ********************/struct test{short i;char p;}tt;void main(){ tt.i = 0x0102; char i_low = (char) *(&tt.p-2); //tt.i的低地址字节赋值给i_low char i_high = (char) *(&tt.p-1); //tt.i的高地址字节赋值给i_high if(sizeof(short) == 2){if( i_low == 1 && i_high == 2)printf("大端字节序");else if( i_low = 2 && i_high == 1 )printf("小端字节序");elseprintf("结果未知");}elseprintf("sizof(short)=%d,不等于2",sizeof(short));}
如上所示,运用struct也可以判断大小字节序的。
--本人菜鸟一只,欢迎大牛们提出错误。^_^
- 大小端字节序的判断
- 大小端字节序的判断
- 大小端字节序的判断
- 大小端字节序判断
- 大小字节端判断
- 字节大小端判断
- 如何简单的判断机器的大小端字节序
- 主机字节序大小端判断
- 用函数判断大小端字节序
- 主机字节序(大小端判断)及网络字节序
- 主机字节序(大小端判断)及网络字节序
- 判断机器大小字节序
- 判断CPU存储字节大小端的两个程序
- 什么是大端字节序?什么是小端字节序?如何用共用体判断机器的大小端?
- 大小端解释判断,网络字节序转换
- 菜鸟学习历程【10】机器字节序、大小端的判断与修改
- C语言 机器字节序、大小端的判断与修改
- 判断上传图片文件的大小(字节)
- Unix网络编程(卷二)源码编译报错解决
- 水仙花数
- 牛腩新闻发布系统总结
- linux 内核移植和根文件系统的制作
- AndroidManifest.xml文件综合详解
- 大小端字节序的判断
- 关于 a-- 和 --a
- 构建高性能的web站点学习笔记五------Web服务器缓存
- 心不狠则站不稳。你该学会的十六件事
- view组件draw,onDraw,dispatchDraw
- Reporting service安装与配置 .
- Perl 最佳实践(节选) --- 18
- 配置了拦截器的应用执行HttpURLConnection之connect方法遇到的问题
- Marketo收购社交营销应用开发商Crowd Factory