#include <stdio.h>
#include <string.h> #define MAX_LEN 16
#define ESP 1e-5 typedef int int32_t;
typedef unsigned int uint32_t; /***********************************************************************
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
整数 整数 整数 整数 整数 整数 整数 整数 整数 整数 整数 小数点 小数 小数 小数 \0
整数 整数 整数 整数 整数 整数 整数 整数 8 4 5 . 1 2 3 \0 函数名称:整数转字符串,加入4位小数,和小数点
函数功能:将整数保存是字符数组中,字符数组大小是16位char,最后一位是0x00
入口参数:str,字符指针,value,需要转换的数据,precision小数点保留的位数
出口参数:ret 返回值,-1,error 否则,返回转换的数量,包括小数点'.'
备 注: 基本思路:
由于电压、电流都是mv,ma为单位,上位机已经扩大1000倍,作为整数下发stm32中
后4位最为小数,中间添加小数点'.' 求余数,保存,直到数据为0 目前,不考虑负数,因为电压、电流均为正数,需要在上层函数,进行数据的判断。
***********************************************************************/
int32_t int_to_string(char *str, const uint32_t value, const uint32_t precision)
{
int32_t ret = 0; //返回值
uint32_t prv_precision = precision; //小数点保留数量3位
uint32_t integer_val = value; //整数部分
uint32_t int_num = 0; //整数的位数
uint32_t mod = 0; //每一位的数据,用于保存到数组中
uint32_t index_int = 0; //整数最低位的保存位置 16-precision-1-1-1, 第9位开始保存整数
uint32_t index_frac = 0; //用于指示小数的下标 if (integer_val >= 840000)
{
integer_val = 840000;
} str[MAX_LEN - 1] = '\0'; index_frac = MAX_LEN - 2; //保存小数部分,先保存最低位小数
do
{
prv_precision--; mod = integer_val % 10; //取余
integer_val /= 10; //printf("\nmod=%d\n", mod);
str[index_frac] = mod + 0x30; //保存数据到字符数组中
//printf("str[%d]=%c\n", index_frac, str[index_frac]);
index_frac--;
//printf("index_frac=%d\n", index_frac);
//printf("prv_precision=%d\n",prv_precision);
}
while (prv_precision); str[MAX_LEN - precision - 2] = '.'; //保存小数点 第10位保存小数点 //整数的位数的保存,先保存最低位整数
index_int = MAX_LEN - precision - 3;
do
{
int_num++; //至少是1位
//printf("\nint_num=%d\n", int_num); mod = integer_val % 10; //先求余数
//printf("mod=%d\n", mod);
integer_val /= 10; //再除10
//printf("integer_val=%d\n", integer_val);
str[index_int] = mod + 0x30; //保存至数组中
//printf("str[%d]=%c\n", index_int, str[index_int]);
index_int--; //保存指针减
//printf("index_int=%d\n", index_int);
}
while (integer_val); ret = int_num + precision + 1; //转换总量=整数转换的数量(1-3位)+小数转换的数量(始终是precision位)+'.'
//printf("\nret=%d\n", ret); uint32_t loop = ret + 1; //加最后一位0x00 '\0',=总共需要搬运的位数
//printf("loop=%d\n", loop); index_frac = 0; //新的保存从0下标开始
index_int++; //从这里开始搬运,之前do-while循环已经减去一,这里要加回去
//printf("index_int=%d\n", index_int); //数据整体搬迁到str[0],以省去前置的零
do
{
loop--;
str[index_frac] = str[index_int];
index_int++; //源数据的开始搬运的下标
index_frac++; //新数据的开始保存的下标
//printf("loop = %d\n",loop);
}
while (loop); return ret;
} /***********************************************************************
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
整数 整数 整数 整数 整数 整数 整数 整数 整数 整数 整数 整数 整数 整数 整数 \0
整数 整数 整数 整数 整数 整数 整数 整数 整数 整数 1 2 3 4 5 \0 函数名称:整数转字符串,无小数点,用于功率参数的转换
函数功能:将整数保存是字符数组中,字符数组大小是16位char,最后一位是0x00
入口参数:str,字符指针,value,需要转换的数据
出口参数:ret 返回值,-1,error 否则,返回转换的数量
备 注: 基本思路:
直接将整数转换保存至字符串中,求余数,并保存,直到数据为零 目前,不考虑负数,因为功率均为正数,需要在上层函数,进行数据的判断。
***********************************************************************/
int32_t int_pow_to_string(char *str, const uint32_t value)
{
int32_t ret = 0; //返回值
uint32_t integer_val = value; //整数
uint32_t int_num = 0; //整数的位数
uint32_t mod = 0; //每一位的数据,用于保存到数组中
uint32_t index_int = 0; //整数最低位的保存位置 16-precision-1-1-1, 第9位开始保存整数
uint32_t index_front = 0; //用于指示新数据的下标,数组的开始处str[0] str[MAX_LEN - 1] = '\0'; //整数的位数的保存,先保存最低位整数
index_int = MAX_LEN - 2;
do
{
int_num++; //至少是1位
//printf("\nint_num=%d\n", int_num); mod = integer_val % 10; //先求余数
//printf("mod=%d\n", mod);
integer_val /= 10; //再除10
//printf("integer_val=%d\n", integer_val);
str[index_int] = mod + 0x30; //保存至数组中
//printf("str[%d]=%c\n", index_int, str[index_int]);
index_int--; //保存指针减
//printf("index_int=%d\n", index_int);
}
while (integer_val); ret = int_num; //转换总量=整数转换的数量
//printf("\nret=%d\n", ret); uint32_t loop = ret + 1; //加最后一位0x00 '\0',=总共需要搬运的位数
//printf("loop=%d\n", loop); index_int++; //从这里开始数据搬运,之前do-while循环已经减去一,这里要加回去
//printf("index_int=%d\n", index_int); //数据整体搬迁到str[0],以省去前置的零
do
{
loop--;
str[index_front] = str[index_int];
index_int++; //源数据的开始搬运的下标
index_front++; //新数据的开始保存的下标
//printf("loop = %d\n",loop);
}
while (loop); return ret;
} int main(void)
{
char str[MAX_LEN] = {0};
memset(str, '0', sizeof(str));
str[MAX_LEN - 1] = '\0';
printf("%s\n", str); uint32_t value = 12345; printf("raw_d = %u\n", value); int_pow_to_string(str, value); printf("%s\n", str); int_to_string(str, value, 3); printf("%s\n", str); //printf("sizeof(str) = %d\n", sizeof(str));
//printf("str = %d\n", *(str + 1));
return 0;
}

代码如上所示,

运行结果

000000000000000

raw_d = 12345

12345

12.345

原理很简单了,可以直接看代码

c语言实现整数转换为字符串——不考虑负数的更多相关文章

  1. C语言把整数转换为字符串

    目录 1.把整数/长整数格式化输出到字符串 2.注意事项 3.版权声明 各位可能在网上看到用以下函数可以将整数转换为字符串: itoa(); //将整型值转换为字符串 ultoa(); // 将无符号 ...

  2. C语言中将数字转换为字符串的方法

    C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串.以下是用itoa()函数将整数转换为字符串的一个例子: # include <stdio. h># ...

  3. UVa 725 简单枚举+整数转换为字符串

    Division  Write a program that finds and displays all pairs of 5-digit numbers that between them use ...

  4. C语言把数字转换为字符串的函数

    博主原文 C语言itoa()函数和atoi()函数详解(整数转字符C实现) C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串. 1.int/float to st ...

  5. C语言把浮点数转换为字符串

    目录 1.把float/double格式化输出到字符串 2.注意事项 3.版权声明 1.把float/double格式化输出到字符串 标准的C语言提供了atof函数把字符串转double,但是没有提供 ...

  6. c/c++将整数转换为字符串

    #include <iostream> using namespace std; int main(int argc, char **argv) { ; iint i,j; ],e[]; ...

  7. C语言实现整数转字符串

    #include <stdio.h> void intToString(int N,char arr[]){ //仅支持有符号4字节的int类型,范围-2147483648 - 21474 ...

  8. 利用python递归实现整数转换为字符串

    def trans(num): if num // 10 == 0: return '%s'%num else: return trans(num//10)+'%s'%(num%10) a=trans ...

  9. 题目要求:建立一个类Str,将一个正整数转换成相应的字符串,例如整数3456转换为字符串"3456".

    题目要求:建立一个类Str,将一个正整数转换成相应的字符串,例如整数3456转换为字符串"3456". 关键:怎么将一个数字转换为字符? [cpp] view plaincopy ...

随机推荐

  1. Django重新添加字段然后迁移给定默认值依然迁移不生效

    1.将对应app下的migrations文件夹下面的除了__init__.py文件外全部删除 2.delete from django_migrations where app='当前模型的app名称 ...

  2. Python属性的查找顺序

    属性查找顺序 关于属性描述符请看上文>属性描述符   在梳理属性查找相关知识时,查看了很多的书籍和他人的博客,发现很多讲的过于抽象,并没有一个清晰的流程呈现.特此写下我对于此方面的理解和总结. ...

  3. Mitsubishi (三菱) Fanuc(发那科),CNC,网口数据采集,NC程序下发(其它品牌CNC,哈斯 马扎克 兄弟等,正在开发中)

    1.话不多说,先看效果 三菱CNC Fanuc CNC 2.能采集的数据有如下: 产量,状态,轴负载,坐标,主轴转速,三个倍率(主轴倍率 进给倍率 快速倍率),进给速度,当前加工程序名/程序号,当前程 ...

  4. 开源图像识别库OpenCV基于Maven的开发环境准备

    1.安装 JDK 8+,并设置 JAVA_HOME 环境变量 2.安装 Maven,并将 “/bin” 子目录设置到 path 环境变量 3.下载 OpenCV,官网传送门 也可以直接下载本人瘦身之后 ...

  5. quartz2.3.0(九)job任务监听器,监听任务执行前、后、取消手动处理方法

    job1任务类 package org.quartz.examples.example9; import java.util.Date; import org.quartz.Job; import o ...

  6. quartz2.3.0(八)使用日历排除不应该执行任务的时间段

    Job任务类 package org.quartz.examples.example8; import java.util.Date; import org.slf4j.Logger; import ...

  7. gitlab 安装、备份与还原及常见设置

    gitlab 安装.备份与还原及常见设置 安装 安装过程比较简单,跑在 docker 上,执行命令即可 -v参数后面的值为卷的名称,自动创建数据卷(如果数据卷不存在) https://docs.git ...

  8. twbsPagination.js分页插件

    分页插件在使用时注意,如果页面中存在其他异步加载的数据,在运行分页方法第一次后,页面上的分页样式与分页中的data数据就是第一次的数据,如果异步加载重新在页面上录入数据,并希望分页继续在新的数据上实现 ...

  9. mabatis缓存

    一级缓存 public static SqlSession getSqlSession() { String resource = "mybatis-config.xml"; In ...

  10. NetworkInterface网速监测

    private NetworkInterface[] nicArr; //网卡集合 private Timer timer; //计时器 public MainWindow() { Initializ ...