聯系我們 - 廣告服務 - 聯系電話:
您的當前位置: > 關注 > > 正文

觀速訊丨【java編程】使用系統函數的兩種方式

來源:CSDN 時間:2023-03-14 08:35:48

有以下種方式實現,其中兩種是使用系統函數,另一種是直接自己編寫。

main() {int u10=0; char u16[10]; int w=0,a,b,i;

printf("請輸入一個數字-->"); scanf("%d",&u10); //u10=16; if(u10==0) {u16[0]="0"; w++; } else {a=u10; while(a) {b=a%16; if(b<10) {u16[w]="0"+b; } else {u16[w]="A"+b-10; } a=a/16; w++; } } printf("\n"); printf("%d(10)轉換為16進制數字為:",u10); for(i=w-1;i>=0;i--) {printf("%c",u16[i]); } printf("\n"); }


(資料圖片僅供參考)

自己編寫的程序:

/將一個任意輸入的10進制數轉化為16進制形式輸出 #include #define MAXSIZE 11

void ten20x(unsigned int a,char *p) {int i;     int j = 2;     int sum = 0;     int count = 0;     unsigned int mask = 0x80000000;

*(p + 0) = "0";     *(p + 1) = "X";     *(p + 10) = "\0";     while(count < 8)     {for(i = 0; i < 4; i++)         {if((a & mask) == mask)      {sum = sum * 2 + 1;      }             else      {sum = sum * 2 + 0;      }      a = a << 1;         }         if(sum < 10)         {*(p + j) = sum + "0";      j++;         }         else         {*(p + j) = sum - 10 + "a";      j++;         }  sum = 0;  count++;     }   }

int main() {unsigned int ver = 0;

char sixtn[MAXSIZE];

printf("please input a num \n");     scanf("%d",&ver);     ten20x(ver,sixtn);     printf("%d 的16進制為 %s\n",ver,sixtn);     return 0; }  

使用系統函數實現要加入#include ,自己編寫則不需要這個頭文件。

下面的代碼就是3種方式的實現,包括2位的整數和任意整數(2的31次方以內)都可以??勺约哼x擇需要的實現方式。

利用系統函數有

1. char *  itoa ( int value, char * str, int base );value是要轉化的數字,str是轉化后的字符串存儲的位置,base是進制數(但是這個函數不是標準C函數,有些編譯器是不支持的?。K源a可以為:

char buffer [33]; //用于存放轉換好的十六進制字符串,可根據需要定義長度   char * inttohex(int aa) {itoa (aa, buffer, 16);     return (buffer); } 2. sprintf(str,"%x",value);str是轉化存儲的位置,%x表示十六進制格式,value是要轉化的數字。所以代碼可以為:

char buffer [33]; //用于存放轉換好的十六進制字符串,可根據需要定義長度   char * inttohex(int aa) {sprintf(buffer, "%x", aa);     return (buffer); } 3. 自己編寫

如果參數只要兩位數的整數,那么很簡單。代碼如下:

char buffer [3]; //用于存放轉換好的十六進制字符串。由于只要支持2位整數,所以長度3即可   char * inttohex(int aa) {if (aa / 16 < 10)   //計算十位,并轉換成字符          buffer[0] = aa / 16 + "0";     else         buffer[0] = aa / 16 - 10 + "A";     if (aa % 16 < 10)   //計算個位,并轉換成字符         buffer[1] = aa % 16 + "0";     else         buffer[1] = aa % 16 - 10 + "A";     buffer[2] = "\0";   //字符串結束標志     return (buffer); } 如果參數是任意整數,由于計算方法是每次都除以16和對16取余數,余數以倒序的順序排列就是結果,所以最佳方法是用遞歸函數(當然循環也可以,但需要最后再進行倒序)。遞歸代碼如下:

char buffer [33]; //用于存放轉換好的十六進制字符串,可根據需要定義長度   char * inttohex(int aa) {static int i = 0;     if (aa < 16)            //遞歸結束條件      {if (aa < 10)        //當前數轉換成字符放入字符串              buffer[i] = aa + "0";         else             buffer[i] = aa - 10 + "A";         buffer[i+1] = "\0"; //字符串結束標志      }     else     {inttohex(aa / 16);  //遞歸調用          i++;                //字符串索引+1          aa %= 16;           //計算當前值         if (aa < 10)        //當前數轉換成字符放入字符串              buffer[i] = aa + "0";         else             buffer[i] = aa - 10 + "A";     }     return (buffer); }

最后測試代碼如下(以sprintf為例,其余只要替換inttohex函數中的代碼內容即可):

#include  #include    char buffer [33]; //用于存放轉換好的十六進制字符串,可根據需要定義長度   char * inttohex(int aa) {sprintf(buffer, "%x", aa);     return (buffer); }   int main () {int num;   char * hex_str;   printf ("Enter a number: ");   scanf ("%d",&num);   hex_str = inttohex (num);   printf ("Hexadecimal number: %sH\n", hex_str);   return 0; }  

責任編輯:

標簽:

相關推薦:

精彩放送:

新聞聚焦
Top 岛国精品在线