c語言10進制轉16進制
① 10進制轉16進制c語言
用一個抄字元數組,初始化為「襲1,2,3,4,5,6,7,8,9,A,B,C,D,E,F」,也就是0到15
用十進制的數不斷模上16,得到的余數進入到一個棧中。計算完之後從棧中取值,在數組當中去找出數字,輸出就可以了
② c語言編程 把十進制轉換為十六進制
方法一:
#include<iostream>
#include <string>
using namespace std;
string DecIntToHexStr(long long num)
{ string str; long long Temp = num / 16; int left = num % 16; if (Temp > 0) str +=
DecIntToHexStr(Temp); if (left < 10) str += (left + '0'); else str += ('A' + left - 10); return str;}
string DecStrToHexStr(string str){ long long Dec = 0; for (int i = 0; i < str.size(); ++i) Dec =
Dec * 10 + str[i] - '0'; return DecIntToHexStr(Dec);}int main()
{ string DecStr; while (cin >> DecStr) { cout << "0x" + DecStrToHexStr(DecStr); } return 0;}
方法二:
#include<iostream>
#include <string>
#include<vector>
#include <sstream>
#include <math.h>
using namespace std;int main()
{ string decStr; cin >> decStr; int num = stoi(decStr); vector<int>v; while (num) { int bit = num % 2; v.push_back(bit); num = num / 2; }
reverse(v.begin(), v.end()); string hexStr; if (v.size() % 4 == 0) { for (int i = 0; i < v.size() / 4; ++i) { int temp = 0, k = 3; for (int j = i * 4; j < (i +
1) * 4; ++j) { if (v[j] == 1) temp += pow(2, k); --k; } if (temp <= 9) hexStr += temp; else hexStr += ('A' + temp - 10); } }
else { int zeroNum = 4 - v.size() % 4; for (int i = 0; i < zeroNum; ++i) v.insert(v.begin(), 0); for (int i = 0; i < v.size() / 4; ++i) { int temp = 0, k = 3; for
(int j = i * 4; j < (i + 1) * 4; ++j) { if (v[j] == 1) temp += pow(2, k); --k; }
if (temp <= 9) { stringstream ss; string strTemp;
ss << temp; ss >> strTemp; hexStr += strTemp; } else hexStr += ('A' + temp - 10); } } cout << hexStr << endl; return 0;}
(2)c語言10進制轉16進制擴展閱讀:
還有3種方式可以實現,其中兩種是使用系統函數,另一種是直接自己編寫。
下面的代碼就是3種方式的實現,包括2位的整數和任意整數(2的31次方以內)都可以。可自己選擇需要的實現方式。
利用系統函數有
1. char * itoa ( int value, char * str, int base );value是要轉化的數字,str是轉化後的字元串存儲的位置,base是進制數(但是這個函數不是標准C函數,有些編譯器是不支持的!)。所以代碼可以為:
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. 自己編寫
如果參數只要兩位數的整數,那麼很簡單。
代碼如下:
#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 ", hex_str); return 0;}
③ 用C語言編程實現10進制數值轉16進制字元串
#include
<stdio.h>
#define
N
8
void
tran(int
num,int
k)
{
int
arr[N],i;
for
(i=0;i
<N;i++)
{
arr[i]=num%k;
num=num/k;
if
(num==0)
break;
}
printf("轉換為%d進制數為:
",k);
for
(;i>=0;i--)
switch
(arr[i])
{
case
10:
printf("A");break;
case
11:
printf("B");break;
case
12:
printf("C");break;
case
13:
printf("D");break;
case
14:
printf("E");break;
case
15:
printf("F");break;
default:
printf("%d",arr[i]);
}
printf("
");
}
void
main()
{
int
num,choo;
loop:
printf("請選擇功能:0.退出
1.十進制轉二進制
2.十進制轉八進制
3.十進制轉十六進制
");
scanf("%d",&choo);
switch
(choo)
{
case
1:
printf("請輸入要轉換的十進制數:");
scanf("%d",&num);
tran
(num,2);
goto
loop;
case
2:
printf("請輸入要轉換的十進制數:");
scanf("%d",&num);
tran
(num,8);
goto
loop;
case
3:
printf("請輸入要轉換的十進制數:");
scanf("%d",&num);
tran
(num,16);
goto
loop;
case
0:break;
default
:
printf("輸入有誤!請重新輸入!
");
goto
loop;
}
}
④ C語言十進制轉十六進制數
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10
int* ahex(int dec){
int n=1;
int m=16;
int *a;
a = (int*)malloc(sizeof(int)*MAXSIZE+1);
while(dec >= m)
{
m = m*16;
n++;
}
//printf("位數:%d ",n);
*a = n;
while(n>0)
{
*(a+n)= dec/(m/16);
dec = dec-*(a+n)*(m/16);
n--;
m = m/16;
}
return a;
}
void print_hex(int *p){
int n = *p;
printf("hex: 0x");
while(n>0)
{
switch(*(p+n)){
case 10:printf("A");break;
case 11:printf("B");break;
case 12:printf("C");break;
case 13:printf("D");break;
case 14:printf("E");break;
case 15:printf("F");break;
default: printf("%d",*(p+n));break;
}
n--;
}
printf(" ");
}
int main()
{
int rec=0;
int *p;
while(1){
printf("請輸入一個十進制數字:");
scanf("%d",&rec);
p = ahex(rec);
print_hex(p);
}
return 0;
}
(4)c語言10進制轉16進制擴展閱讀
十進制轉二進制
#include<stdio.h>
int main(void)
{
int i=0,n,a[32];
printf("請輸入一個十進制整數. ");
scanf("%d",&n);
while (n>0)
{
a[i]=n%2;
i=i+1;
n=n/2;
}
printf("十進制整數轉換為二進制數是: ");
for(i--;i>=0;i--)
printf("%d",a[i]);
printf(" ");
return 0;
}
⑤ 在c語言中用最簡單的方法把十進制轉化為十六進制
代碼如下:
#include"stdio.h"
intmain()
{
intnum=0;
inta[100];
inti=0;
intm=0;
intyushu;
charhex[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
printf("請輸入一個十進制整數:");
scanf("%d",&num);
while(num>0)
{
yushu=num%16;
a[i++]=yushu;
num=num/16;
}
printf("轉化為十六進制的數為:0x");
for(i=i-1;i>=0;i--)//倒序輸內出{
m=a[i];
printf("%c",hex[m]);
}
printf("
");
}
程序運行結果:
擴展容資料
C語言中,十進制轉換十六進制,可以先輸入十進制整數,然後去拼十六進制,十六進制由數字 0~9、字母 A~F 或 a~f(不區分大小寫)組成,使用時必須以0x或0X(不區分大小寫)開頭,只需把二進制除以16得到余數去上面定義的hex[16]數組進行取值接可以得到轉換的數字。
⑥ 關於C語言十進制轉十六進制
for(l=i;l!=0;l--)
少俠,你這個l的初值賦錯了,應該是l=i-1進;判定條件也錯了是l>=0,因為你m是從0開始的,而上個循環結束後,i指向的實際是數組結尾的\0.。。
另外,你要是想輸出8進制和16進制數,printf("%o
%X");就可以了,不用這么費勁吧。。
⑦ 求c語言將十進制數轉換為16進制的函數
基本全部情況都考慮了,所以有點長,請耐心看完。代碼可以直接拷貝試驗,都已調試過,保證正確!
有3種方式實現,其中兩種是使用系統函數,另一種是直接自己編寫。
使用系統函數實現要加入#include <stdlib.h>,自己編寫則不需要這個頭文件。
下面的代碼就是3種方式的實現,包括2位的整數和任意整數(2的31次方以內)都可以。可自己選擇需要的實現方式。
利用系統函數有
1. char * itoa ( int value, char * str, int base );value是要轉化的數字,str是轉化後的字元串存儲的位置,base是進制數(但是這個函數不是標准C函數,有些編譯器是不支持的!)。所以代碼可以為:
charbuffer[33];//用於存放轉換好的十六進制字元串,可根據需要定義長度
char*inttohex(intaa)
{
itoa(aa,buffer,16);
return(buffer);
}
2.sprintf(str,"%x",value);str是轉化存儲的位置,%x表示十六進制格式,value是要轉化的數字。所以代碼可以為:
charbuffer[33];//用於存放轉換好的十六進制字元串,可根據需要定義長度
char*inttohex(intaa)
{
sprintf(buffer,"%x",aa);
return(buffer);
}
3. 自己編寫
如果參數只要兩位數的整數,那麼很簡單。代碼如下:
charbuffer[3];//用於存放轉換好的十六進制字元串。由於只要支持2位整數,所以長度3即可
char*inttohex(intaa)
{
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]='