itoa函数

📘 C 语言 itoa 函数详解

1️⃣ 什么是 itoa

  • itoa 全称:integer to ASCII
  • 功能:将 整数转换为字符串(ASCII 表示)
  • 函数原型(非标准 C,但在很多编译器支持,如 stdlib.h<stdlib.h>):
char * itoa(int value, char *str, int base);

2️⃣ 参数说明

参数 说明
value 需要转换的整数
str 存放转换后字符串的数组指针(调用者提供缓冲区)
base 数字进制(2~36),如二进制 2,十进制 10,十六进制 16

3️⃣ 返回值

  • 返回 str 指针,即转换后的字符串
  • 注意:str 必须有足够的空间存放结果(包括负号和 '\0')

4️⃣ 使用示例

#include &lt;stdio.h>
#include &lt;stdlib.h>
int main() {
``int num = -255;
``char str[20];
``itoa(num, str, 10); // 十进制
``printf("Decimal: %s\n", str);
``itoa(num, str, 16); // 十六进制
``printf("Hex: %s\n", str);
``itoa(num, str, 2); // 二进制
``printf("Binary: %s\n", str);
``return 0;
}

输出示例

Decimal: -255
Hex: -FF
Binary: -11111111

5️⃣ itoa 的实现原理(手写版)

#include &lt;stdio.h>
#include &lt;string.h>
void reverse(char *str) {
``int i, j;
``char temp;
``for (i = 0, j = strlen(str)-1; i &lt; j; i++, j--) {
``temp = str[i];
``str[i] = str[j];
``str[j] = temp;
``}
}
char* my_itoa(int value, char* str, int base) {
``int i = 0;
``int isNegative = 0;
``if (value == 0) {
``str[i++] = '0';
``str[i] = '\0';
``return str;
``}
``if (value &lt; 0 &amp;&amp; base == 10) {
``isNegative = 1;
``value = -value;
``}
``while (value != 0) {
``int rem = value % base;
``str[i++] = (rem > 9) ? (rem - 10) + 'A' : rem + '0';
``value /= base;
``}
``if (isNegative)
``str[i++] = '-';
``str[i] = '\0';
``reverse(str);
``return str;
}
int main() {
``char str[20];
``printf("%s\n", my_itoa(-255, str, 10)); // Decimal
``printf("%s\n", my_itoa(-255, str, 16)); // Hex
``printf("%s\n", my_itoa(-255, str, 2)); // Binary
``return 0;
}

6️⃣ 注意事项

  1. itoa 不是 ANSI C 标准函数,有些编译器不支持
  2. 对于跨平台,推荐使用 sprintfsnprintf
int num = -255;
char str[20];
sprintf(str, "%d", num); // 十进制
sprintf(str, "%x", num); // 十六进制
  1. 处理负数时,只在 十进制 添加负号,其他进制一般不加

👌 明白了,阿杰,我给你写一个 完整 C 语言版进制转换工具 ,支持 二进制、八进制、十进制、十六进制 ,使用自定义 itoa 函数实现。


🛠️ C 语言进制转换工具(自定义 itoa)

#include &lt;stdio.h>
#include &lt;string.h>
// 反转字符串
void reverse(char *str) {
``int i, j;
``char temp;
``for (i = 0, j = strlen(str)-1; i &lt; j; i++, j--) {
``temp = str[i];
``str[i] = str[j];
``str[j] = temp;
``}
}
// 自定义 itoa 函数
char* my_itoa(int value, char* str, int base) {
``int i = 0;
``int isNegative = 0;
``if (value == 0) {
``str[i++] = '0';
``str[i] = '\0';
``return str;
``}
``if (value &lt; 0 &amp;&amp; base == 10) { // 十进制负数处理
``isNegative = 1;
``value = -value;
``}
``while (value != 0) {
``int rem = value % base;
``str[i++] = (rem > 9) ? (rem - 10) + 'A' : rem + '0';
``value /= base;
``}
``if (isNegative)
``str[i++] = '-';
``str[i] = '\0';
``reverse(str);
``return str;
}
// 主程序:进制转换工具
int main() {
``int num;
``char str[65]; // 64位整数最大二进制位 + '\0'
``int choice;
``printf("请输入要转换的整数: ");
``scanf("%d", &amp;num);
``printf("选择目标进制: 1. 二进制 2. 八进制 3. 十进制 4. 十六进制\n");
``scanf("%d", &amp;choice);
``switch(choice) {
``case 1:
``my_itoa(num, str, 2);
``printf("二进制: %s\n", str);
``break;
``case 2:
``my_itoa(num, str, 8);
``printf("八进制: %s\n", str);
``break;
``case 3:
``my_itoa(num, str, 10);
``printf("十进制: %s\n", str);
``break;
``case 4:
``my_itoa(num, str, 16);
``printf("十六进制: %s\n", str);
``break;
``default:
``printf("无效选项!\n");
``}
``return 0;
}

✅ 功能说明

  1. 支持 二进制、八进制、十进制、十六进制输出
  2. 自定义 itoa,跨平台可用,不依赖编译器非标准函数
  3. 负数处理:只有十进制显示负号
  4. 可扩展 :修改 my_itoa 即可支持任意进制(2~36)

👌 明白了,阿杰,我帮你写一个 C 语言进制转换器升级版,具备以下功能:

  • 循环输入整数
  • 一次性输出 二进制、八进制、十进制、十六进制
  • 使用自定义 itoa 函数
  • 可以连续转换多个数,输入 qQ 退出

🛠️ C 语言进制转换器(升级版)

#include &lt;stdio.h>
#include &lt;string.h>
#include &lt;stdlib.h>
// 反转字符串
void reverse(char *str) {
``int i, j;
``char temp;
``for (i = 0, j = strlen(str)-1; i &lt; j; i++, j--) {
``temp = str[i];
``str[i] = str[j];
``str[j] = temp;
``}
}
// 自定义 itoa 函数
char* my_itoa(int value, char* str, int base) {
``int i = 0;
``int isNegative = 0;
``if (value == 0) {
``str[i++] = '0';
``str[i] = '\0';
``return str;
``}
``if (value &lt; 0 &amp;&amp; base == 10) { // 十进制负数处理
``isNegative = 1;
``value = -value;
``}
``while (value != 0) {
``int rem = value % base;
``str[i++] = (rem > 9) ? (rem - 10) + 'A' : rem + '0';
``value /= base;
``}
``if (isNegative)
``str[i++] = '-';
``str[i] = '\0';
``reverse(str);
``return str;
}
// 显示所有进制
void showAllBases(int num) {
``char str[65]; // 64位整数最大二进制位 + '\0'
``my_itoa(num, str, 2);
``printf("二进制: %s\n", str);
``my_itoa(num, str, 8);
``printf("八进制: %s\n", str);
``my_itoa(num, str, 10);
``printf("十进制: %s\n", str);
``my_itoa(num, str, 16);
``printf("十六进制: %s\n", str);
}
int main() {
``char input[100];
``int num;
``printf("=== C 语言进制转换器 ===\n");
``printf("输入整数进行转换,输入 'q' 或 'Q' 退出。\n\n");
``while (1) {
``printf("请输入整数: ");
``fgets(input, sizeof(input), stdin);

| ``if (input[0] == 'q' || input[0] == 'Q') | | ----------------------------------------------------- |

``break;
``num = atoi(input);
``showAllBases(num);
``printf("\n");
``}
``printf("已退出转换器。\n");
``return 0;
}

✅ 功能说明

  1. 循环输入:支持连续输入多个整数
  2. 输出所有进制:二进制、八进制、十进制、十六进制
  3. 自定义 itoa:不依赖平台非标准函数
  4. 易扩展:可以加更多进制、支持大整数

www.52runoob.com/archives/68...

相关推荐
ganshenml10 小时前
【Web】证书(SSL/TLS)与域名之间的关系:完整、通俗、可落地的讲解
前端·网络协议·ssl
这是个栗子10 小时前
npm报错 : 无法加载文件 npm.ps1,因为在此系统上禁止运行脚本
前端·npm·node.js
HIT_Weston11 小时前
44、【Ubuntu】【Gitlab】拉出内网 Web 服务:http.server 分析(一)
前端·ubuntu·gitlab
华仔啊11 小时前
Vue3 如何实现图片懒加载?其实一个 Intersection Observer 就搞定了
前端·vue.js
JamesGosling66612 小时前
深入理解内容安全策略(CSP):原理、作用与实践指南
前端·浏览器
不要想太多12 小时前
前端进阶系列之《浏览器渲染原理》
前端
g***969012 小时前
Node.js npm 安装过程中 EBUSY 错误的分析与解决方案
前端·npm·node.js
七喜小伙儿12 小时前
第2节:趣谈FreeRTOS--打工人的日常
前端
我叫张小白。12 小时前
Vue3 响应式数据:让数据拥有“生命力“
前端·javascript·vue.js·vue3
laocooon52385788612 小时前
vue3 本文实现了一个Vue3折叠面板组件
开发语言·前端·javascript