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. poj 1095 题解(卡特兰数+递归

    题目 题意:给出一个二叉树的编号,问形态. 编号依据 1:如果二叉树为空,则编号为0: 2:如果二叉树只有一个节点,则编号为1: 3:所有含有m个节点的二叉树的编号小于所有含有m+1个节点的二叉树的编 ...

  2. 一个php将数据库的数据导出到excle表格中的小dome

    首先我们需要下载个PHPExcel,PHPExcel下载地址链接:https://pan.baidu.com/s/1nxpAc45 密码:qgct 下面来写个dome: <?php //把数据写 ...

  3. Django 报错 admin.E408 admin.E409 admin.E410

    报错内容 ERRORS: ?: (admin.E408) 'django.contrib.auth.middleware.AuthenticationMiddleware' must be in MI ...

  4. golang - 映射 ini 配置文件

    使用:setting.AppSetting.PageSize 包:go get github.com/go-ini/ini

  5. LOJ2484 CEOI2017 Palindromic Partitions DP、回文树

    传送门 当我打开Luogu题解发现这道题可以Hash+贪心的时候我的内心是崩溃的-- 但是看到这道题不都应该认为这是一道PAM的练手好题么-- 首先把原字符串重排为\(s_1s_ks_2s_{k-1} ...

  6. Mysql字符集之utf8和utf8mb4的使用问题

    Mysql之utf8和utf8mb4的区别 最近在项目中使用Mysql数据库保存emoji表情 

  7. SQL Server中,常用的全局变量

    在SQL Server中,全局变量是一种特殊类型的变量,服务器将维护这些变量的值.全局变量以@@前缀开头,不必进行声明,它们属于系统定义的函数.下表就是SQL Server中一些常用的全局变量. 全局 ...

  8. jquery获取窗口和文档的高度和宽度

    整个可视区域的宽度和高度(会随着浏览器窗口大小改变而改变): $(window).width()和$(window).height() 整个文档的宽度和高度(不变): $(docoument).wid ...

  9. ADO.NET 六(DataRow DataColumn)

    已经介绍了使用 SqlCommand 对象中的 ExecuteNonQuery 方法执行非查询 SQL 语句来实现对数据表的更新操作,使用 DataSet 对象也能实现相同的功能, 并且能节省数据访问 ...

  10. kubernetes第四章--架构