我们只是站在巨人的肩膀上,其实巨人也是站在巨人的肩膀上的。我们写程序能抄就抄。根据自己的功能需求专门找到类似的程序,完全理解了,改为自己风格的能解决问题的程序,用来做过了几个产品经历过多次测试不断修改完善和增加。与单片机种类无关,可以直接复制黏贴。
源文件my_string.c
/******************************************************************************
* Title: my_string.c
* Create Date: 2014-September-14
* Description: 字符串操作,字符串长度为[0, 254]
* Company:
* Author:
* E-MAIL:
* Last Update: 2016-September-13
* Version: V1.3
******************************************************************************/
#include"my_string.h"
/**************************************************************************
Function: Str_Itoa
Description: 数字转换为字符串,限制为正整数(不带负号)
Input: - num 数字九位[0,4294967296]
Output: - str 字符串
Return: no
**************************************************************************/
void Str_Itoa(uint32_t num, char *str)
{
uint8_t i=0, j, k, half;
char tmp;
// 转换
if (0 == num)
{
str[0] = '0';
++i;
}
else
{
while (num > 0)
{
str[i] = '0' + num%10;
++i;
num /= 10;
}
}
str[i] = '\0';
// 逆序
if (i >= 2)
{
half = i / 2; // 字符个数的一半
--i;
for (j=0; j<half; ++j)
{
k = i - j;
tmp = str[j];
str[j] = str[k];
str[k] = tmp;
}
}
}
/**************************************************************************
Function: Str_ItoaLimit
Description: 数字转换为字符串,限制为正整数(不带负号)
限制最小长度,不够则左边填充字符
Input: - num 数字九位[0,4294967296]
- len 最小长度
- ch 填充字符
Output: - str 字符串
Return: no
**************************************************************************/
void Str_ItoaLimit(uint32_t num, char *str, uint8_t len, char ch)
{
uint8_t i=0, j, k, half;
char tmp;
// 转换
if (0 == num)
{
str[0] = '0';
++i;
}
else
{
while (num > 0)
{
str[i] = '0' + num%10;
++i;
num /= 10;
}
}
// 在前面填充字符
if (i < len)
{
for (; i<len; ++i)
{
str[i] = ch;
}
}
str[i] = '\0';
// 逆序
if (i >= 2)
{
half = i / 2; // 字符个数的一半
--i;
for (j=0; j<half; ++j)
{
k = i - j;
tmp = str[j];
str[j] = str[k];
str[k] = tmp;
}
}
}
/*****