c语言实现整数转换为字符串——不考虑负数
#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语言实现整数转换为字符串——不考虑负数的更多相关文章
- C语言把整数转换为字符串
目录 1.把整数/长整数格式化输出到字符串 2.注意事项 3.版权声明 各位可能在网上看到用以下函数可以将整数转换为字符串: itoa(); //将整型值转换为字符串 ultoa(); // 将无符号 ...
- C语言中将数字转换为字符串的方法
C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串.以下是用itoa()函数将整数转换为字符串的一个例子: # include <stdio. h># ...
- UVa 725 简单枚举+整数转换为字符串
Division Write a program that finds and displays all pairs of 5-digit numbers that between them use ...
- C语言把数字转换为字符串的函数
博主原文 C语言itoa()函数和atoi()函数详解(整数转字符C实现) C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串. 1.int/float to st ...
- C语言把浮点数转换为字符串
目录 1.把float/double格式化输出到字符串 2.注意事项 3.版权声明 1.把float/double格式化输出到字符串 标准的C语言提供了atof函数把字符串转double,但是没有提供 ...
- c/c++将整数转换为字符串
#include <iostream> using namespace std; int main(int argc, char **argv) { ; iint i,j; ],e[]; ...
- C语言实现整数转字符串
#include <stdio.h> void intToString(int N,char arr[]){ //仅支持有符号4字节的int类型,范围-2147483648 - 21474 ...
- 利用python递归实现整数转换为字符串
def trans(num): if num // 10 == 0: return '%s'%num else: return trans(num//10)+'%s'%(num%10) a=trans ...
- 题目要求:建立一个类Str,将一个正整数转换成相应的字符串,例如整数3456转换为字符串"3456".
题目要求:建立一个类Str,将一个正整数转换成相应的字符串,例如整数3456转换为字符串"3456". 关键:怎么将一个数字转换为字符? [cpp] view plaincopy ...
随机推荐
- 05 javascript知识点---BOM和DOM
1.DOM简单学习(为了满足案例要求) 功能:控制html文档的内容获取页面标签(元素)对象:Element document.getElementById("id值"):通过元素 ...
- (四)linux 学习 --使用命令
The Linux Command Line 读书笔记 - 部分内容来自 http://billie66.github.io/TLCL/book/chap06.html 文章目录 什么是命令 是哪一种 ...
- poj 1095 题解(卡特兰数+递归
题目 题意:给出一个二叉树的编号,问形态. 编号依据 1:如果二叉树为空,则编号为0: 2:如果二叉树只有一个节点,则编号为1: 3:所有含有m个节点的二叉树的编号小于所有含有m+1个节点的二叉树的编 ...
- 【宁夏区域赛】G.Pot!
题意: 给定两个操作: MULTIPLY L R x 区间里都乘以一个数x MAX L R : 计算区间内一个2,3,5,7个数最大值. #include<bits/stdc++.h> ...
- Latex局部字体大小设置
tex 设置字体大小命令由小到大依次为: \tiny \scriptsize \footnotesize \small \normalsize \large \Large \LARGE \huge \ ...
- Vue学习笔记(20190722)
- css之多行居中
需求: 单行到多行文字居中. <div> <p>应该为数组中的每个子代分配一个唯一的键.表格dataSource和中的值columns应遵循此规则.默认情况下</p> ...
- 2.NioEventLoop的创建
NioEventLoop的创建 NioEventLoop是netty及其重要的组成部件,它的首要职责就是为注册在它上的channels服务,发现这些channels上发生的新连接.读写等I/O事件,然 ...
- [CF724G]Xor-matic Number of the Graph
题目大意:有一张$n$个点$m$条边的无向图,定义三元组$(u,v,s)$是有趣的,当且仅当有一条$u\to v$的路径,路径上所有边的异或和为$s$.问所有有趣的三元组的$s$之和.$n\leqsl ...
- Linux 中ifconfig和ip addr命令看不到ip
解决方案: 输入 vi /etc/sysconfig/network-scripts/ifcfg-ens33 将ONBOOT权限改为yes 保存退出,按Esc,输入:wq 重启网络服务,输入 sudo ...