开发者社区> 余二五> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

unsigned char类型指针与int型数据的转换

简介:
+关注继续查看

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

    unsigned int type;

    unsigned char *pType;

   

    type = 2;

    pType = (unsigned char *)&type;

 

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

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

image

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

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

image

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

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





本文转自 tywali 51CTO博客,原文链接:http://blog.51cto.com/lancelot/470035,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
char型int型float型double型数组在内存中所占的字节数(16位、32位、64位PC机)
char型int型float型double型数组在内存中所占的字节数(16位、32位、64位PC机)
0 0
char*转换为jstring
char*转换为jstring
0 0
unsigned/signed int/char类型表示的数值范围
一个32位的signed int类型整数表示的范围:-2^31~2^31-1 一个32位的unsigned int类型整数表示的范围: 0~2^32-1   一个8位的signed char类型整数表示的范围:-2^7~2^7-1 一个8位的unsigned char类型整数表示的范围: 0...
597 0
关于C/C++ int (*t5)[3] 指针类型说明
程序如下:  8 #include   9 #include  10 using namespace std;  11   12   13 int main(void)  14 {  15     unsigned int *t1 = new uns...
615 0
C/C++ char a[ ] 和 char *a 的差别,改变 char *a爆内存错误的原因
对于一些需要传入参数为 char * temp 指针类的函数; 我们定义一个 char a[10] 或char *a 传进去都是可以的。 但是, 如果该函数是会改变你所传入的参数的值时, 传入 char *a 将爆内存错误,而 char a[10] 却不会。
694 0
不能将参数 2 从“char [8]”转换为“LPCWSTR”
在编译一个网上的小项目的代码时,出现以下错误: 不能将参数 2 从“char [8]”转换为“LPCWSTR” 错误原因: 项目属性使用的Uncode字符集,与代码要求的不匹配; 解决办案: 选中项目,然后点击菜单中的项目——>属性——>配置属性——>常规——>项...
355 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载