最近在寫C語言用到了_itoa函數自己也想着實現一個。
首先要知道_itoa函數是干什么的,在百度百科上對itoa函數有這樣一句:“itoa取整數輸入值,並將其轉換為相應進制數字的字符串。”實際上在控制台的輸出也就是把一個1十進制數轉換成相應的進制輸出,只不過寫代碼是要用字符串存儲。
經過我的一些測試發現,當輸入的十進制是負數時對應的二進制是他的補碼,然后看了幾個人家的代碼,發現對這個細節的處理不過到位,我就花時間自己寫了一個。
#include<stdio.h> #include<stdlib.h> void myitoa(int num, char* str, int radix); int main() { int num; scanf_s("%d", &num); char str[33] = { 0 }; //存放其他進制進制數的字符數組包括'\0' myitoa(num, str, 2); //調用函數,這里用二進制進行測試 printf("%s", str); //輸出進制字符串 } void myitoa(int num, char* str, int radix) { int i = 0; int sum; unsigned int num1 = num; //如果是負數求補碼,必須將他的絕對值放在無符號位中在進行求反碼 char str1[33] = { 0 }; if (num<0) { //求出負數的補碼 num = -num; num1 = ~num; num1 += 1; } if (num == 0) { str1[i] = '0'; i++; } while(num1 !=0) { //進行進制運算 sum = num1 % radix; str1[i] = (sum > 9) ? (sum - 10) + 'a' : sum + '0'; num1 = num1 / radix; i++; } i--; int j = 0; for (i; i >= 0; i--) { //逆序輸出 str[i] = str1[j]; j++; } }
