记录一下将一个整数转换成2~36进制的代码,
// 字符串反转函数
void reverse(char str[], int length) {
int start = 0;
// length - 1 指向\0 前面那个的那个下标
int end = length - 1;
// 如果 strat 和 end 相等了,那么这个元素是没必要换的
while (start < end) {
char temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
}
// num 是要被转化的参数, str是存储转化后数据的空间, base是要转化对应的进制数
char* itoa(int num, char* str, int base) {
int i = 0;
int isNegative = 0;
// 如果num 是 0
if (num == 0) {
str[i++] = '0';
str[i] = '\0';
return str;
}
// 如果num 是负数,做个标记,并让num 转换为正数
if (num < 0 && base == 10) {
isNegative = 1;
num = -num;
}
while (num != 0) {
int rem = num % base;
str[i++] = (rem > 9) ? (rem - 10) + 'a' : rem + '0';
num = num / base;
}
if (isNegative) {
str[i++] = '-';
}
str[i] = '\0';
reverse(str, i);
return str;
}
x下面写一个main函数测试
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char * argv[]) {
argc = 2;
argv[1] = "256";
if (argc != 2) {
fprintf(stderr, "Usage:./XXX number");
}
int *endpoint;
int num = atoi(argv[1]);
char binary[128] = {0};
itoa(num, binary, 2);
printf("%s\n", binary);
sscanf(binary, "%d", &num);
printf("%d\n", num);
return 0;
}