#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. Mybatis中实体类属性与数据库列表间映射方法介绍

               这篇文章主要介绍了Mybatis中实体类属性与数据列表间映射方法介绍,一共四种方法方法,供大家参考.         Mybatis不像Hibernate中那么自动化,通过@Co ...

  2. Python之 random 模块

    #!/usr/bin/env python # -*- coding:utf8 -*- import random ''' 如果想要随机的内容的话,就可以使用这个模块来完成 ''' ######### ...

  3. Json 文件读写以及和IniFile 转换

    JSON 文件是越来越受欢迎了,以前程序配置文件用Ini,Ini 简练,简单.方便,但是也有不少缺点,比如,没有 JSON 直观,无法存储复杂点的数据类型. 于是乎,我封装了一个TJsonFile 的 ...

  4. 11 IO流(八)——装饰器设计模式,Filter装饰流

    声明:本文部分图片及内容引用自:https://www.cnblogs.com/qiumingcheng/p/5219631.html java装饰器设计模式 举一个形象的例子,人可以说话,而扩音器可 ...

  5. nginx安装错误:No package nginx available

    出现错误: 1,备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载新的CentO ...

  6. change事件传值方式 data-set 以及复杂数据类型 可以动态创建对象push到数组里面

    <template>   <div>     <!-- <div class="banner">       <a-breadcru ...

  7. Layui + thymeleaf org.thymeleaf.exceptions.TemplateProcessingException: Could not parse as expression: " 错误解决

    解决方法: 1.将layui的代码移动到新的js文件当中,用template模板引擎的方式引入: <script th:src="@{/static/js/facility/mover ...

  8. SpringBoot 多数据库支持:

    SpringBoot 多数据库支持: springboot2.0+mybatis多数据源集成 https://www.cnblogs.com/cdblogs/p/9275883.html Spring ...

  9. web.config 研究

    一.将配置映射成类 1.配置中增加 <configSections> <section name="appConfiguration" type="Oi ...

  10. thinkphp5 使用PHPExcel 导入导出

    首先下载PHPExcel类.网上很多,自行下载. 然后把文件放到vendor文件里面. 一般引用vendor里面的类或者插件用vendor(); 里面加载的就是vendor文件,然后想要加载哪个文件, ...