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;}
(1)c語言十進制數轉換成十六進制數擴展閱讀:
還有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語言十進制轉十六進制數
C語言十進制轉十六進制數的源代碼如下:
#include<bits/stdc++.h>
using namespace std;
void IntZh0x(int n)
{int s=n%16;
if(n/16!=0) IntZh0x(n/16);
if(s>9)
{
if(s==15) cout<<"F";
else if(s==14) cout<<"E";
else if(s==13) cout<<"D";
else if(s==12) cout<<"C";
else if(s==11) cout<<"B";
else if(s==10) cout<<"A";
}
else cout<<s;
}
int main(){
int n;
cin>>n;
IntZh0x(n);
return 0;
}
(2)c語言十進制數轉換成十六進制數擴展閱讀
1、十六進制數轉換成十進制數解,其值為各個位碼乘以位權然後完全相加。
2、十六進制就是把 4 個二進制位組合為一位來表示,每一位有0b0000 ~ 0b1111 共 16 個值,用 0 ~ 9 再加上 A ~ F(或 a ~ f)表示,那麼它自然就是逢十六進位,它本質上同二進制是一樣的,是二進制的一種縮寫形式。
❸ 用C語言如何把十進制轉換為十六進制,要求程序中運用函數
**
程序功能:求二進制,十進制,八進制
創建人:蒲宇林
創建日期:2007年8月13日
**/
#include
void
two();
void
eight();
void
sixteen();
/**主函數**/
void
main()
{
int
select;
do
{
printf("0
-
退出,1
-
十進制轉二進制,2
-
十進制轉八進制,3
-
十進制轉十六進制");
scanf("%d",&select);
switch(select)
{
case
1
:
two();
break;
//十進制轉二進制
case
2
:
eight();
break;
//十進制轉八進制
case
3
:
sixteen();
break;
//十進制轉十六進制
default
:
printf("您的輸入有誤,請重新輸入!");
break;
}
if(select
==
0)
{
break;
}
}while(1);
}
void
two()
{
int
num,
i;
int
arr[20];
printf("\n請輸入一個十進制數:");
scanf("%d",&num);
for(
i
=
0
;
1
;
i++)
//轉換為二進制並存入數組
{
arr[i]
=
num
%
2;
num
=
num
/
2;
if(num
==
0)
{
break;
}
}
printf("轉換為二進制:");
//列印
for(;
i
>=
0
;
i--
)
{
printf("%d",arr[i]);
}
printf("\n");
}
void
eight()
{
int
num,
i;
int
arr[20];
printf("\n請輸入一個十進制數:");
scanf("%d",&num);
for(
i
=
0
;
1
;
i++)
//轉換為八進制並存入數組
{
arr[i]
=
num
%
8;
num
=
num
/
8;
if(num
==
0)
{
break;
}
}
printf("轉換為八進制:");
//列印
for(;
i
>=
0
;
i--
)
{
printf("%d",arr[i]);
}
printf("\n");
}
void
sixteen()
{
int
num,
i;
int
arr[20];
printf("\n請輸入一個十進制數:");
scanf("%d",&num);
for(
i
=
0
;
1
;
i++)
//轉換為二進制並存入數組
{
arr[i]
=
num
%
16;
num
=
num
/
16;
if(num
==
0)
{
break;
}
}
printf("轉換為十六進制:");
//列印
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("\n");
}
❹ 用C語言編程如何將十進制轉換成十六進制
給你個各種進制轉換的通用函數,十進制轉十六進制,d1=10,d2=16
#include <stdio.h>
void conversion(char s[],char s2[],int d1,int d2)
{
// s[]:轉換前的數字
// s2[]:轉換後的數字
// d1:原進制數
// d2:需要轉換到的進制數
// 高於9 的位數用大寫'A'~'Z'表示
int i,j,t,num=0;
char c;
for (i=0;s[i]!='\0';i++)
{
if(s[i]<='9'&&s[i]>='0')
t=s[i]-'0';
else
t=s[i]-'A'+10;
num=num*d1+t;
}
i=0;
while(1)
{
t=num%d2;
if (t<=9)
s2[i]=t+'0';
else
s2[i]=t+'A'-10;
num/=d2;
if (num==0)
break;
i++;
}
for(j=0;j<=i/2;j++)
{
c = s2[j];
s2[j] = s2[i-j];
s2[i-j] = c;
}
s2[i+1]='\0';
}
int main()
{
char a[100],b[100]={0},c[100]={0};
int n,m;
while(1)
{
scanf("%d%d%*c",&n,&m);
gets(a);
conversion(a,b,n,m);
printf("%s\n",b);//想轉成int型,可用int k=atoi(b);
}
return 0;
}
❺ C語言編程:怎麼把一個十進制數轉換成為一個十六進制數
第一種:用來糊弄老師的,輸入一個數採用16進制格式輸出
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
printf("%x", num);
return 0;
}
第二種:
#include <stdio.h>
#include <string.h>
char oNumTable[6] = {'A', 'B', 'C', 'D', 'E', 'F'};
void dToO(int, char*);
int main()
{
int dNum;
char oNum[100] = {0};
//輸入一個十進制數
scanf("%d", &dNum);
//調用轉換函數,將十進制轉換成以字元串表示的十六進制
dToO(dNum, oNum);
//輸出以字元串表示的16進制數據
printf("%s\n", oNum);
return 0;
}
void dToO(int dNum, char* oNum)
{
char temp[100] = {0};
for (int i = 0; (dNum) && (i < 100) ; i++) {
temp[i] = (dNum % 16);
if (temp[i] > 9) {
temp[i] = oNumTable[temp[i] - 10];
}
else{
temp[i] += '0';
}
dNum /= 16;
}
char* p = temp;
while (*(p+1)) p++;
for (int i = 0; p != temp - 1; i++, p--) {
oNum[i] = *p;
}
}
❻ 如何用c語言實現10進制轉換成16進制
#include<stdio.h>
#defineLEN100
char*decimal2Others(intvalue,char*string,intradix){/*十進制數轉任意進制*/
/*除基數取余法:十進制數不斷除以進制基數直至為零,每次相除取得余數之逆序即為轉換結果*/
intremain,i=1,j=0;
inttemp[LEN];
while(value){/*除基數取余*/
remain=value%radix;
value=value/radix;
temp[i++]=remain;
}
while(--i){/*逆序存儲*/
if(temp[i]>9)
string[j++]=temp[i]-10+'a';/*十以上進制處理*/
else
string[j++]=temp[i]+'0';
}
string[j]='