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月前
|
存储 SQL 关系型数据库
【YashanDB知识库】MySQL迁移至崖山char类型数据自动补空格问题
**简介**:在MySQL迁移到崖山环境时,若字段类型为char(2),而应用存储的数据仅为'0'或'1',查询时崖山会自动补空格。原因是mysql的sql_mode可能启用了PAD_CHAR_TO_FULL_LENGTH模式,导致保留CHAR类型尾随空格。解决方法是与应用确认数据需求,可将崖山环境中的char类型改为varchar类型以规避补空格问题,适用于所有版本。
|
2月前
|
存储 SQL 关系型数据库
【YashanDB 知识库】MySQL 迁移至崖山 char 类型数据自动补空格问题
问题分类】功能使用 【关键字】char,char(1) 【问题描述】MySQL 迁移至崖山环境,字段类型源端和目标端都为 char(2),但应用存储的数据为'0'、'1',此时崖山查询该表字段时会自动补充空格 【问题原因分析】mysql 有 sql_mode 控制,检查是否启用了 PAD_CHAR_TO_FULL_LENGTH SQL 模式。如果启用了这个模式,MySQL 才会保留 CHAR 类型字段的尾随空格,默认没有启动。 #查看sql_mode mysql> SHOW VARIABLES LIKE 'sql_mode'; 【解决/规避方法】与应用确认存储的数据,正确定义数据
|
7月前
|
存储 Java Windows
java基础(9)数据类型中的char类型以及涉及到的转义字符
Java中的char类型可以存储一个中文字符,因为它占用两个字节。转义字符允许在代码中使用特殊字符,例如`\n`表示换行,`\t`表示制表符,`\\`表示反斜杠,`\'`表示单引号,`\"`表示双引号。可以使用`\u`后跟Unicode编码来表示特定的字符。
162 2
java基础(9)数据类型中的char类型以及涉及到的转义字符
|
6月前
|
SQL 存储 关系型数据库
SQL判断CHAR类型字段不为空的方法与技巧
在SQL查询中,判断一个CHAR类型字段是否不为空是一个常见的需求
|
6月前
|
C语言 C++
【C语言】指针篇-一篇搞定不同类型指针变量-必读指南(3/5)
【C语言】指针篇-一篇搞定不同类型指针变量-必读指南(3/5)
|
7月前
|
存储 Go
Go: struct 结构体类型和指针【学习笔记记录】
本文是Go语言中struct结构体类型和指针的学习笔记,包括结构体的定义、成员访问、使用匿名字段,以及指针变量的声明使用、指针数组定义使用和函数传参修改值的方法。
|
8月前
|
存储 安全 Go
深入理解 Go 语言中的指针类型
【8月更文挑战第31天】
88 0
|
5月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
494 13
|
7月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
274 4
|
6月前
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
82 0
下一篇
oss创建bucket