博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
unsigned char类型指针与int型数据的转换
阅读量:7236 次
发布时间:2019-06-29

本文共 589 字,大约阅读时间需要 1 分钟。

前两天写了个程序,在PC上单元测试一切正常,但是加载到嵌入式系统中运行,执行的结果总是不正确,纠察了很久,发现问题出现在如下代码:

    unsigned int type;

    unsigned char *pType;

   

    type = 2;

    pType = (unsigned char *)&type;

 

在PC机上,上述代码运行后,type=2, *pType=2,而在嵌入式系统中运行,得到的值却是type=2, *pType=0。

经过查阅资料才发现,原来这次使用的嵌入式系统数据存储是大端结构,低地址存放的是高位数据,上述数据的存储形式如下:

指针pType指向的是type变量的第一个字节所在的地址,实际上该字节保存的数据是type变量的最高字节的值。

在PC机上,数据存储是小端模式,低地址存放的是低位数据,上述数据的存储形式如下:

指针pType指向的数据正好就是type变量最低位字节的数据。

因此,编写嵌入式系统的代码,如果想要考虑到通用性,则应当尽量避免使用上述的指针用法来访问int类型数据的每个字节的值,而是应该使用int类型数据进行左移、右移等操作得到相应字节的值,这样不管是大端还是小端存储,都不会有问题。

本文转自 tywali 51CTO博客,原文链接:http://blog.51cto.com/lancelot/470035,如需转载请自行联系原作者
你可能感兴趣的文章
《javascript高级程序设计》笔记:Number类型
查看>>
Vue全家桶仿闲鱼移动端App
查看>>
Redis 有序集合
查看>>
mobile调试方法
查看>>
elasticsearch 爬坑记
查看>>
Fundebug能够捕获这些BUG
查看>>
React系列---Redux异步流
查看>>
[LeetCode] Different Ways to Add Parentheses
查看>>
C++11: 右值引用 addition
查看>>
【Memache】部署Memcache,采用Supervisord管理
查看>>
微服务指南走北(五):什么样的服务才可以说是微服务?
查看>>
在virtualbox 下安装ubuntu 并配置共享文件夹
查看>>
cp、mv、install
查看>>
Redis学习笔记——dict
查看>>
前端实例练习 - 动效伸缩搜索框
查看>>
Laravel 中间件
查看>>
Laravel5.4 Api Token认证
查看>>
vue.js总结
查看>>
一步一步开发安卓下的react-native应用系列之前言
查看>>
使用Google Zxing生成二维码的例子
查看>>