當前位置:編程學習大全網 - 編程語言 - c 十進制轉十六進制 數據

c 十進制轉十六進制 數據

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

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

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

利用系統函數有

1. char * itoa ( int value, char * str, int base );value是要轉化的數字,str是轉化後的字符串存儲的位置,base是進制數(但是這個函數不是標準C函數,有些編譯器是不支持的!)。所以代碼可以為:

1

2

3

4

5

6

7

char buffer [33]; //用於存放轉換好的十六進制字符串,可根據需要定義長度

char * inttohex(int aa)

{

itoa (aa, buffer, 16);

return (buffer);

}

2. sprintf(str,"%x",value);str是轉化存儲的位置,%x表示十六進制格式,value是要轉化的數字。所以代碼可以為:

1

2

3

4

5

6

7

char buffer [33]; //用於存放轉換好的十六進制字符串,可根據需要定義長度

char * inttohex(int aa)

{

sprintf(buffer, "%x", aa);

return (buffer);

}

3. 自己編寫

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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取余數,余數以倒序的順序排列就是結果,所以最佳方法是用遞歸函數(當然循環也可以,但需要最後再進行倒序)。遞歸代碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

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函數中的代碼內容即可):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

#include <stdio.h>

#include <stdlib.h>

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;

  • 上一篇:鋼鐵是怎樣煉成的練習題
  • 下一篇:快來帶著爸媽去靖安丨重陽感恩行,壹起去靖安!
  • copyright 2024編程學習大全網