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,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
存储 C语言
文件的类型指针
文件的类型指针
14 0
|
1月前
|
编译器 C语言
void的指针类型
void的指针类型
10 0
|
1月前
|
存储 编译器 C语言
c语言中char的作用类型
c语言中char的作用类型
21 0
|
1月前
|
存储 程序员 C++
在C++编程语言中指针的作用类型
在C++编程语言中指针的作用类型
14 0
|
29天前
|
C语言
Void 指针类型
Void 指针类型
9 0
|
1月前
|
存储 C语言
C语言指针类型和空类型详解
C语言指针类型和空类型详解
21 0
|
1月前
|
存储 C++
在C++语言中函数指针的作用类型
在C++语言中函数指针的作用类型
10 0
|
2月前
|
程序员 编译器 C++
【C++11】 指针空类型 - nullptr
【C++11】 指针空类型 - nullptr
19 0
|
7月前
|
存储 关系型数据库 MySQL
面试时被这样一个问:”存储MD5值应该用VARCHAR还是用CHAR?
一个5年工作经验的小伙伴,在面试的时候被这样一个问题。说”存储MD5值应该用VARCHAR还是用CHAR“,他一时间不只如何选择,感觉用VARCHAR也可以,用CHAR也行。希望我来帮忙分析一下。
70 0
|
9天前
|
存储 数据库
5. CHAR和VARCHAR的区别?
`CHAR`和`VARCHAR`在数据库中有所不同:`CHAR`长度固定,用空格填充,存储效率高,英文占1字节,汉字占2字节;而`VARCHAR`长度可变,节省空间,英文和汉字都占2字节。
13 0

热门文章

最新文章