方法一:
成都創(chuàng)新互聯(lián)公司長期為上1000+客戶提供的網(wǎng)站建設(shè)服務,團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為金城江企業(yè)提供專業(yè)的網(wǎng)站設(shè)計制作、成都網(wǎng)站設(shè)計,金城江網(wǎng)站改版等技術(shù)服務。擁有10年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
#includeiostream
#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;}
方法二:
#includeiostream
#include string
#includevector
#include sstream
#include math.h
using namespace std;int main()
{ string decStr; cin decStr; int num = stoi(decStr); vectorintv; 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;}
擴展資料:
還有3種方式可以實現(xiàn),其中兩種是使用系統(tǒng)函數(shù),另一種是直接自己編寫。
下面的代碼就是3種方式的實現(xiàn),包括2位的整數(shù)和任意整數(shù)(2的31次方以內(nèi))都可以??勺约哼x擇需要的實現(xiàn)方式。
利用系統(tǒng)函數(shù)有
1. char *? itoa ( int value, char * str, int base );value是要轉(zhuǎn)化的數(shù)字,str是轉(zhuǎn)化后的字符串存儲的位置,base是進制數(shù)(但是這個函數(shù)不是標準C函數(shù),有些編譯器是不支持的!)。所以代碼可以為:
char buffer [33]; //用于存放轉(zhuǎn)換好的十六進制字符串,可根據(jù)需要定義長度 char * inttohex(int aa){? ? itoa (aa, buffer, 16);? ? return (buffer);}
2. sprintf(str,"%x",value);str是轉(zhuǎn)化存儲的位置,%x表示十六進制格式,value是要轉(zhuǎn)化的數(shù)字。所以代碼可以為:
char buffer [33]; //用于存放轉(zhuǎn)換好的十六進制字符串,可根據(jù)需要定義長度 char * inttohex(int aa){? ? sprintf(buffer, "%x", aa);? ? return (buffer);}
3. 自己編寫
如果參數(shù)只要兩位數(shù)的整數(shù),那么很簡單。
代碼如下:
#include stdio.h#include stdlib.h char buffer [33]; //用于存放轉(zhuǎn)換好的十六進制字符串,可根據(jù)需要定義長度 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;}
首先對于一個整數(shù),無論是十進制還是十六進制,它的值是一定的。
所以,轉(zhuǎn)換16進制和10進制原理是一樣的,先求出轉(zhuǎn)換后的值,然后再以十六進制的形式輸出就行了。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
你不會是直接從網(wǎng)頁里面復制就粘貼到編輯器里面吧?
那樣不行的,你自己重新輸入一下?;蛘呦瓤截惖轿谋疚臋n里面,再從文本文檔里面復制。從網(wǎng)頁里面直接復制有特殊字符的。
還有,程序函數(shù)不能在主函數(shù)里面定義的。
#include stdio.h
int convert(char * str);
void main()
{
char str[20];
int result;
scanf("%s",str); //自己輸入一個十六進制的串
result = convert(str);
printf("%0x",result);
}
int convert(char * str)
{
int i,sum = 0;
for(i = 0;str[i] != '\0';i++)
{
if(str[i]='0' str[i]='9')
sum += sum*16 + str[i]-'0';
else if(str[i]='f' str[i]='a')
sum += sum*16 + str[i]-'a'+1;
else if(str[i]='F' str[i]='A')
sum += sum*16 + str[i]-'A'+1;
}
return sum;
}
多麻煩?。?/p>
看好了:
#includestdio.h
int a;
char *str="1Af";
int main()
{
sscanf(str,"%x",a);//%x為讀入16進制數(shù),大小寫均可。sscanf是從c字符串中讀入變量。
printf("%i",a);
return 0;
}
十進制轉(zhuǎn)化為十六進制代碼:
#include?"stdio.h"?int?main()
{
int?num=0;
int?a[100];
int?i=0;
int?m=0;
int?yushu;
char?hex[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
printf("請輸入一個十進制數(shù):");
scanf("%d",num);?while(num0)?{?yushu=num%16;
a[i++]=yushu;
num=num/16;
}?printf("轉(zhuǎn)化為十六進制的數(shù)為:0x");?for(i=i-1;i=0;i--)//倒序輸出?{m=a[i];
printf("%c",hex[m]);?}?printf("\n");
}
程序運行結(jié)果:
擴展資料:
進制轉(zhuǎn)換由一組數(shù)碼符號和兩個基本因素“基數(shù)”與“位權(quán)”構(gòu)成。基數(shù)是指,進位計數(shù)制中所采用的數(shù)碼(數(shù)制中用來表示“量”的符號)的個數(shù)。位權(quán)是指,進位制中每一固定位置對應的單位值。
舉例:二進制數(shù)轉(zhuǎn)換為十進制數(shù)
二進制數(shù)第0位的權(quán)值是2的0次方,第1位的權(quán)值是2的1次方……
所以,設(shè)有一個二進制數(shù):0110 0100,轉(zhuǎn)換為10進制為:
下面是豎式:
0110 0100 換算成十進制
第0位 0 * 20?= 0
第1位 0 * 21?= 0
第2位 1 * 22?= 4
第3位 0 * 23?= 0
第4位 0 * 24?= 0
第5位 1 * 25?= 32
第6位 1 * 26?= 64
第7位 0 * 27?= 0
公式:第N位2(N)
---------------------------
100
用橫式計算為:
0 * 20?+ 0 * 21?+ 1 * 22?+ 0 * 23?+ 0 * 24?+ 1 * 25?+ 1* 26?+ 0 * 27?= 100
0乘以多少都是0,所以我們也可以直接跳過值為0的位:
1 * 22?+ 1 * 25?+1*26?= 100
參考資料:
百度百科-進制轉(zhuǎn)換
**
程序功能:求二進制,十進制,八進制
創(chuàng)建人:蒲宇林
創(chuàng)建日期:2007年8月13日
**/
#include
void
two();
void
eight();
void
sixteen();
/**主函數(shù)**/
void
main()
{
int
select;
do
{
printf("0
-
退出,1
-
十進制轉(zhuǎn)二進制,2
-
十進制轉(zhuǎn)八進制,3
-
十進制轉(zhuǎn)十六進制");
scanf("%d",select);
switch(select)
{
case
1
:
two();
break;
//十進制轉(zhuǎn)二進制
case
2
:
eight();
break;
//十進制轉(zhuǎn)八進制
case
3
:
sixteen();
break;
//十進制轉(zhuǎn)十六進制
default
:
printf("您的輸入有誤,請重新輸入!");
break;
}
if(select
==
0)
{
break;
}
}while(1);
}
void
two()
{
int
num,
i;
int
arr[20];
printf("\n請輸入一個十進制數(shù):");
scanf("%d",num);
for(
i
=
;
1
;
i++)
//轉(zhuǎn)換為二進制并存入數(shù)組
{
arr[i]
=
num
%
2;
num
=
num
/
2;
if(num
==
0)
{
break;
}
}
printf("轉(zhuǎn)換為二進制:");
//打印
for(;
i
=
;
i--
)
{
printf("%d",arr[i]);
}
printf("\n");
}
void
eight()
{
int
num,
i;
int
arr[20];
printf("\n請輸入一個十進制數(shù):");
scanf("%d",num);
for(
i
=
;
1
;
i++)
//轉(zhuǎn)換為八進制并存入數(shù)組
{
arr[i]
=
num
%
8;
num
=
num
/
8;
if(num
==
0)
{
break;
}
}
printf("轉(zhuǎn)換為八進制:");
//打印
for(;
i
=
;
i--
)
{
printf("%d",arr[i]);
}
printf("\n");
}
void
sixteen()
{
int
num,
i;
int
arr[20];
printf("\n請輸入一個十進制數(shù):");
scanf("%d",num);
for(
i
=
;
1
;
i++)
//轉(zhuǎn)換為二進制并存入數(shù)組
{
arr[i]
=
num
%
16;
num
=
num
/
16;
if(num
==
0)
{
break;
}
}
printf("轉(zhuǎn)換為十六進制:");
//打印
for(;
i
=
;
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");
}