- 一 数字类型与字符串类型
在做嵌入式C程序开发中,如果通信协议采用字符串方式来交互数据,比如使用到AT指令格式,或者需要GUI界面的显示,那么就会经常用到数字类型与字符串类型的转换。在C语言标准库stdlib中提供了多个字符串与数字类型的转换函数,丰富的转换功能能够满足绝大多数的需求,方便了C语言的开发。
1.1、数字类型
多个数据在内存中是连续存储的,彼此之间没有明显的界限,如果不明确指明数据的长度,计算机就不知道何时存取结束。因此,C语言的数据类型就是明确指明了当前数据的长度信息。
C语言自带的基本数字数据类型有char(字符型)、short(短整型)、int(整型)、long(长整型)、long long(长整型)、float(单精度浮点型)、double(双精度浮点型)、void *(指针型)。每个数据类型的所占用的字节数都是固定的,知道了数据类型,也就知道了数据的长度。
对于指定编译器,每种数据类型的长度是固定的,因此根据数据类型定义了数据后,其在内存中的存取位置大小也是固定,如图所示,定义了char/short/int/longlong类型的数据,其在内存中的分配情况,数据按小端存储。
目前采用MDK的内置ARMCC5.0编译器中,各种数据类型的长度如上图的32位栏中所示,与ARMCC5.0编译后在MCU执行所获取的类型长度一致。
输出的类型长度信息如下图所示:
1.2、字符串
基于STM32芯片的C编程,字符串的表现形式可以是常量字符串或保存于数组中,如下图所示:
数字字符串就是将C语言的基本数字类型,转换为C语言的字符串形式,C语言的标准库stdlib中提供了许多的转换函数。
其中itoa()、ltoa()、ultoa()函数不是标准的ANSI,一般只在Windows平台下的C编译器支持,Linux平台下的GCC编译器不一定支持这3个函数。因此如果需要进行跨平台开发,数字类型转为字符串类型,应采用标准ANSI C支持的sprintf()函数。
- 二 数字转字符串