C语言实现任意进制转换函数 itob():将整数转换为字符串
#include <stdio.h>
#include <string.h>
void itob(int n, char s[], int b){
int i = 0;
int sign = n;
if(sign < 0){
n = -n;
}
do{
int digit = n % b;
if(digit < 10){
s[i++] = digit + '0';
}else{
s[i++] = digit - 10 + 'a';
}
n /= b;
}while(n > 0);
if(sign < 0){
s[i++] = '-';
}
s[i] = '\0';
int j = 0;
int len = strlen(s);
for(j = 0; j < len/2; j++){
char temp = s[j];
s[j] = s[len-j-1];
s[len-j-1] = temp;
}
}
int main(){
int n,b;
char s[100];
printf("请输入一个整数 n 和进制 b(2 <= b <= 36):");
scanf("%d%d", &n, &b);
itob(n, s, b);
printf("%s\n", s);
return 0;
}
代码功能:
该代码实现了 itob() 函数,该函数接收三个参数:
- n: 待转换的整数。
- s: 用于存储转换结果的字符数组。
- b: 转换的目标进制 (2 <= b <= 36)。
itob() 函数通过循环将整数 n 分别取模和除以目标进制 b,并将结果转换为相应的字符,存储到字符数组 s 中。最后,该函数对字符串进行反转,以确保输出从最高位非零位开始。
代码示例:
输入 n = 33, b = 17,则输出 1g,即 33 的 17 进制表示。
代码优化:
该代码已进行如下优化:
- 使用
do-while循环进行进制转换,更简洁高效。 - 使用字符数组
s存储转换结果,避免使用动态内存分配。 - 使用
strlen()函数获取字符串长度,提高代码可读性。 - 使用
for循环对字符串进行反转,更易于理解。
应用场景:
该代码可以用于各种需要进行进制转换的场景,例如:
- 将整数转换为二进制、八进制或十六进制字符串。
- 将整数转换为自定义进制的字符串,例如 17 进制、36 进制等。
扩展阅读:
原文地址: https://www.cveoy.top/t/topic/ovLR 著作权归作者所有。请勿转载和采集!