1. #include <stdio.h>
  2. #include <string.h>
  3. #define MAX_LEN 16
  4. #define ESP 1e-5
  5. typedef int int32_t;
  6. typedef unsigned int uint32_t;
  7. /***********************************************************************
  8. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  9. 整数 整数 整数 整数 整数 整数 整数 整数 整数 整数 整数 小数点 小数 小数 小数 \0
  10. 整数 整数 整数 整数 整数 整数 整数 整数 8 4 5 . 1 2 3 \0
  11. 函数名称:整数转字符串,加入4位小数,和小数点
  12. 函数功能:将整数保存是字符数组中,字符数组大小是16位char,最后一位是0x00
  13. 入口参数:str,字符指针,value,需要转换的数据,precision小数点保留的位数
  14. 出口参数:ret 返回值,-1,error 否则,返回转换的数量,包括小数点'.'
  15. 备 注:
  16. 基本思路:
  17. 由于电压、电流都是mv,ma为单位,上位机已经扩大1000倍,作为整数下发stm32中
  18. 后4位最为小数,中间添加小数点'.'
  19. 求余数,保存,直到数据为0
  20. 目前,不考虑负数,因为电压、电流均为正数,需要在上层函数,进行数据的判断。
  21. ***********************************************************************/
  22. int32_t int_to_string(char *str, const uint32_t value, const uint32_t precision)
  23. {
  24. int32_t ret = 0; //返回值
  25. uint32_t prv_precision = precision; //小数点保留数量3位
  26. uint32_t integer_val = value; //整数部分
  27. uint32_t int_num = 0; //整数的位数
  28. uint32_t mod = 0; //每一位的数据,用于保存到数组中
  29. uint32_t index_int = 0; //整数最低位的保存位置 16-precision-1-1-1, 第9位开始保存整数
  30. uint32_t index_frac = 0; //用于指示小数的下标
  31. if (integer_val >= 840000)
  32. {
  33. integer_val = 840000;
  34. }
  35. str[MAX_LEN - 1] = '\0';
  36. index_frac = MAX_LEN - 2;
  37. //保存小数部分,先保存最低位小数
  38. do
  39. {
  40. prv_precision--;
  41. mod = integer_val % 10; //取余
  42. integer_val /= 10;
  43. //printf("\nmod=%d\n", mod);
  44. str[index_frac] = mod + 0x30; //保存数据到字符数组中
  45. //printf("str[%d]=%c\n", index_frac, str[index_frac]);
  46. index_frac--;
  47. //printf("index_frac=%d\n", index_frac);
  48. //printf("prv_precision=%d\n",prv_precision);
  49. }
  50. while (prv_precision);
  51. str[MAX_LEN - precision - 2] = '.'; //保存小数点 第10位保存小数点
  52. //整数的位数的保存,先保存最低位整数
  53. index_int = MAX_LEN - precision - 3;
  54. do
  55. {
  56. int_num++; //至少是1位
  57. //printf("\nint_num=%d\n", int_num);
  58. mod = integer_val % 10; //先求余数
  59. //printf("mod=%d\n", mod);
  60. integer_val /= 10; //再除10
  61. //printf("integer_val=%d\n", integer_val);
  62. str[index_int] = mod + 0x30; //保存至数组中
  63. //printf("str[%d]=%c\n", index_int, str[index_int]);
  64. index_int--; //保存指针减
  65. //printf("index_int=%d\n", index_int);
  66. }
  67. while (integer_val);
  68. ret = int_num + precision + 1; //转换总量=整数转换的数量(1-3位)+小数转换的数量(始终是precision位)+'.'
  69. //printf("\nret=%d\n", ret);
  70. uint32_t loop = ret + 1; //加最后一位0x00 '\0',=总共需要搬运的位数
  71. //printf("loop=%d\n", loop);
  72. index_frac = 0; //新的保存从0下标开始
  73. index_int++; //从这里开始搬运,之前do-while循环已经减去一,这里要加回去
  74. //printf("index_int=%d\n", index_int);
  75. //数据整体搬迁到str[0],以省去前置的零
  76. do
  77. {
  78. loop--;
  79. str[index_frac] = str[index_int];
  80. index_int++; //源数据的开始搬运的下标
  81. index_frac++; //新数据的开始保存的下标
  82. //printf("loop = %d\n",loop);
  83. }
  84. while (loop);
  85. return ret;
  86. }
  87. /***********************************************************************
  88. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  89. 整数 整数 整数 整数 整数 整数 整数 整数 整数 整数 整数 整数 整数 整数 整数 \0
  90. 整数 整数 整数 整数 整数 整数 整数 整数 整数 整数 1 2 3 4 5 \0
  91. 函数名称:整数转字符串,无小数点,用于功率参数的转换
  92. 函数功能:将整数保存是字符数组中,字符数组大小是16位char,最后一位是0x00
  93. 入口参数:str,字符指针,value,需要转换的数据
  94. 出口参数:ret 返回值,-1,error 否则,返回转换的数量
  95. 备 注:
  96. 基本思路:
  97. 直接将整数转换保存至字符串中,求余数,并保存,直到数据为零
  98. 目前,不考虑负数,因为功率均为正数,需要在上层函数,进行数据的判断。
  99. ***********************************************************************/
  100. int32_t int_pow_to_string(char *str, const uint32_t value)
  101. {
  102. int32_t ret = 0; //返回值
  103. uint32_t integer_val = value; //整数
  104. uint32_t int_num = 0; //整数的位数
  105. uint32_t mod = 0; //每一位的数据,用于保存到数组中
  106. uint32_t index_int = 0; //整数最低位的保存位置 16-precision-1-1-1, 第9位开始保存整数
  107. uint32_t index_front = 0; //用于指示新数据的下标,数组的开始处str[0]
  108. str[MAX_LEN - 1] = '\0';
  109. //整数的位数的保存,先保存最低位整数
  110. index_int = MAX_LEN - 2;
  111. do
  112. {
  113. int_num++; //至少是1位
  114. //printf("\nint_num=%d\n", int_num);
  115. mod = integer_val % 10; //先求余数
  116. //printf("mod=%d\n", mod);
  117. integer_val /= 10; //再除10
  118. //printf("integer_val=%d\n", integer_val);
  119. str[index_int] = mod + 0x30; //保存至数组中
  120. //printf("str[%d]=%c\n", index_int, str[index_int]);
  121. index_int--; //保存指针减
  122. //printf("index_int=%d\n", index_int);
  123. }
  124. while (integer_val);
  125. ret = int_num; //转换总量=整数转换的数量
  126. //printf("\nret=%d\n", ret);
  127. uint32_t loop = ret + 1; //加最后一位0x00 '\0',=总共需要搬运的位数
  128. //printf("loop=%d\n", loop);
  129. index_int++; //从这里开始数据搬运,之前do-while循环已经减去一,这里要加回去
  130. //printf("index_int=%d\n", index_int);
  131. //数据整体搬迁到str[0],以省去前置的零
  132. do
  133. {
  134. loop--;
  135. str[index_front] = str[index_int];
  136. index_int++; //源数据的开始搬运的下标
  137. index_front++; //新数据的开始保存的下标
  138. //printf("loop = %d\n",loop);
  139. }
  140. while (loop);
  141. return ret;
  142. }
  143. int main(void)
  144. {
  145. char str[MAX_LEN] = {0};
  146. memset(str, '0', sizeof(str));
  147. str[MAX_LEN - 1] = '\0';
  148. printf("%s\n", str);
  149. uint32_t value = 12345;
  150. printf("raw_d = %u\n", value);
  151. int_pow_to_string(str, value);
  152. printf("%s\n", str);
  153. int_to_string(str, value, 3);
  154. printf("%s\n", str);
  155. //printf("sizeof(str) = %d\n", sizeof(str));
  156. //printf("str = %d\n", *(str + 1));
  157. return 0;
  158. }

代码如上所示,

运行结果

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. WordPress 设计学习

    "One can never be defeated until defeat has been accepted as a reality"----- Bruce Lee 官网免 ...

  2. Mysql中的读锁,写锁,乐观锁及事务隔离级别和并发问题

    mysql读锁,写锁,乐观锁 读锁,也叫共享锁(shared lock) SELECT * FROM table_name  WHERE ...  LOCK IN SHARE MODE 写锁,也叫排他 ...

  3. 第一二章、C++简介和基本语法

    C++简介 C++包含了三种编程模式,分别是面向过程.面向对象和泛型编程. 程序执行过程 C++编程格式 C++每个程序都会有main()函数作为入口,基本编程包括预处理/头文件.函数.输入输出语句等 ...

  4. 用Python写一个滑动验证码

    1.准备阶段 滑动验证码我们可以直接用GEETEST的滑动验证码. 打开网址:https://www.geetest.com/ ,找到技术文档中的行为验证,打开部署文档,点击Python,下载ZIP包 ...

  5. 51单片机局部变量占用ram的问题

    51单片机局部变量占用ram的问题 一.问题 自从工作以来基本不使用51或者增强型51之类的单片机.最近调试芯圣HC89S003F4增强型51,移植了32的实用代码,结果发现RAM爆了!!! 二.实践 ...

  6. R学习笔记2 因子

    特殊值: 缺失值 NA(Not Avaiable),是不可用的缩写: NaN为“不是一个数”,意味着计算没有数学意义: NULL值,空值,表示一个空的变量,不会占用任何空间,通过is.null(x)来 ...

  7. 如何配置php session使用redis集群

    本实例基于phpredis 2.2.8,支持集群处理,php5.3及以上. 1.页面修改: ini_set('session.save_handler', 'rediscluster'); ini_s ...

  8. webapi session

    webapi中使用session 修改global.cs里面的内容 using System; using System.Web; using System.Web.Routing; using Sy ...

  9. FPM-OVP增强实例-银行账户

    本文是基于NWBC银行账户信息进行增强,相关过程如下: 1.定位需要增强的界面 首先登陆SAP-GUI(尽量EN登陆,ZH可能乱码),输入TCODE:NWBC跳转到浏览器界面,新建银行账户: 注意上图 ...

  10. Qt ListWidget item 发起拖放

    第一步:重写类 MyListWidget 继承自 QListWidget 第二步:重写 mousePressEvent 函数 和 mouseMoveEvent 函数 void mousePressEv ...