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 ...
随机推荐
- TCP/IP学习笔记16--TCP--特点,数据重发,连接管理,段
TCP充分实现了数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的包进行顺序控制,这些在UDP中都是没有的.UDP是一种没有复杂控制,提供面向无连接通信服务的一种协议.TCP是面向有 ...
- c++ std::cout重定向到文件
cout默认是与监视器(屏幕)相连,cout出来的内容会输出到屏幕上,通常是会在命令行窗口之中.但有时,我们希望将cout出来的具体日志.错误信息写到某个文件之中,而屏幕上仅仅显示出当前进行的任务,以 ...
- 面试官:知道你的接口QPS是多少么?(转)
面试官:知道你的接口QPS是多少么? 原创: 孤独烟 孤独烟 9月24日 引言 大家好,我是渣渣烟. 我又来水文章了.这篇文章我个人感觉含金量不是太大,大概5分钟左右就能看完!其实大家都知道,我不爱写 ...
- centos jira wiki 开机自启
启动jira 和 wiki 需要java环境变量 操作步骤: 在 /etc/rc.d/rc.local 文件中[ 注意要有可执行权限 ] export JAVA_HOME=xxxxxxxx expor ...
- SQL Server 索引优化 ——索引缺失
本文我们将重点给出动态视图法发现数据库中缺失的索引.对于索引的调整和新建将不在本文阐述范围,后续将陆续分享相关经验. sys.dm_db_missing_index_details 缺失索引明细,包括 ...
- 【ABAP】第一章-基础
1. ABAP语法基础 1.1 基本数据类型 C.N.D.T.I.F.P.X.string.Xstring P:默认为8字节,最大允许16字节.最大整数位:16*2 = 32 - 1 = 31 -14 ...
- 使用HBuilderX打包成app之后点击返回按钮让它返回上一个页面
首先:下载引入mui.min.js文件,MUI框架mui-min.js文件github地址 https://github.com/dcloudio/mui 下载之后并在index.html文件中引入如 ...
- 3.怪异盒模型box-sizing?弹性盒模型|盒布局?【HTML】
在标准模式下的盒模型:盒子总宽度/高度=width/height+padding+border+margin 在怪异模式下的盒模型下,盒子的总宽度和高度是包含内边距padding和边框border宽度 ...
- css小技巧 --> 单标签实现单行文字居中,多行文字居左
可能出现的尺寸场景: 代码如下: <!DOCTYPE html> <html lang="zh"> <head> <meta charse ...
- 强大的display:grid
自从用习惯flex布局我基本已经不怎么使用float了. 现在又出现了grid布局,就像flex的升级版,布局上十分强大. 主要属性: grid-template-columns://竖向排列 gri ...