重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
方法一:
創(chuàng)新互聯(lián)建站主營河源網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,手機(jī)APP定制開發(fā),河源h5重慶小程序開發(fā)公司搭建,河源網(wǎng)站營銷推廣歡迎河源等地區(qū)企業(yè)咨詢
#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;}
擴(kuò)展資料:
還有3種方式可以實(shí)現(xiàn),其中兩種是使用系統(tǒng)函數(shù),另一種是直接自己編寫。
下面的代碼就是3種方式的實(shí)現(xiàn),包括2位的整數(shù)和任意整數(shù)(2的31次方以內(nèi))都可以??勺约哼x擇需要的實(shí)現(xiàn)方式。
利用系統(tǒng)函數(shù)有
1. char *? itoa ( int value, char * str, int base );value是要轉(zhuǎn)化的數(shù)字,str是轉(zhuǎn)化后的字符串存儲(chǔ)的位置,base是進(jìn)制數(shù)(但是這個(gè)函數(shù)不是標(biāo)準(zhǔn)C函數(shù),有些編譯器是不支持的?。?。所以代碼可以為:
char buffer [33]; //用于存放轉(zhuǎn)換好的十六進(jìn)制字符串,可根據(jù)需要定義長度 char * inttohex(int aa){? ? itoa (aa, buffer, 16);? ? return (buffer);}
2. sprintf(str,"%x",value);str是轉(zhuǎn)化存儲(chǔ)的位置,%x表示十六進(jìn)制格式,value是要轉(zhuǎn)化的數(shù)字。所以代碼可以為:
char buffer [33]; //用于存放轉(zhuǎn)換好的十六進(jì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ì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;}
第一種:用來糊弄老師的,輸入一個(gè)數(shù)采用16進(jìn)制格式輸出
#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};
//輸入一個(gè)十進(jìn)制數(shù)
scanf("%d", dNum);
//調(diào)用轉(zhuǎn)換函數(shù),將十進(jìn)制轉(zhuǎn)換成以字符串表示的十六進(jìn)制
dToO(dNum, oNum);
//輸出以字符串表示的16進(jìn)制數(shù)據(jù)
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;
}
}
**
程序功能:求二進(jìn)制,十進(jìn)制,八進(jìn)制
創(chuàng)建人:蒲宇林
創(chuàng)建日期:2007年8月13日
**/
#include
void
two();
void
eight();
void
sixteen();
/**主函數(shù)**/
void
main()
{
int
select;
do
{
printf("0
-
退出,1
-
十進(jìn)制轉(zhuǎn)二進(jìn)制,2
-
十進(jìn)制轉(zhuǎn)八進(jìn)制,3
-
十進(jìn)制轉(zhuǎn)十六進(jìn)制");
scanf("%d",select);
switch(select)
{
case
1
:
two();
break;
//十進(jìn)制轉(zhuǎn)二進(jìn)制
case
2
:
eight();
break;
//十進(jìn)制轉(zhuǎn)八進(jìn)制
case
3
:
sixteen();
break;
//十進(jìn)制轉(zhuǎn)十六進(jìn)制
default
:
printf("您的輸入有誤,請(qǐng)重新輸入!");
break;
}
if(select
==
0)
{
break;
}
}while(1);
}
void
two()
{
int
num,
i;
int
arr[20];
printf("\n請(qǐng)輸入一個(gè)十進(jìn)制數(shù):");
scanf("%d",num);
for(
i
=
;
1
;
i++)
//轉(zhuǎn)換為二進(jìn)制并存入數(shù)組
{
arr[i]
=
num
%
2;
num
=
num
/
2;
if(num
==
0)
{
break;
}
}
printf("轉(zhuǎn)換為二進(jìn)制:");
//打印
for(;
i
=
;
i--
)
{
printf("%d",arr[i]);
}
printf("\n");
}
void
eight()
{
int
num,
i;
int
arr[20];
printf("\n請(qǐng)輸入一個(gè)十進(jìn)制數(shù):");
scanf("%d",num);
for(
i
=
;
1
;
i++)
//轉(zhuǎn)換為八進(jìn)制并存入數(shù)組
{
arr[i]
=
num
%
8;
num
=
num
/
8;
if(num
==
0)
{
break;
}
}
printf("轉(zhuǎn)換為八進(jìn)制:");
//打印
for(;
i
=
;
i--
)
{
printf("%d",arr[i]);
}
printf("\n");
}
void
sixteen()
{
int
num,
i;
int
arr[20];
printf("\n請(qǐng)輸入一個(gè)十進(jìn)制數(shù):");
scanf("%d",num);
for(
i
=
;
1
;
i++)
//轉(zhuǎn)換為二進(jìn)制并存入數(shù)組
{
arr[i]
=
num
%
16;
num
=
num
/
16;
if(num
==
0)
{
break;
}
}
printf("轉(zhuǎn)換為十六進(jì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");
}
思路:十進(jìn)制整數(shù)轉(zhuǎn)換為十六進(jìn)制整數(shù)采用"除16取余,逆序排列"法。
具體做法是:用16整除十進(jìn)制整數(shù),可以得到一個(gè)商和余數(shù);再用16去除商,又會(huì)得到一個(gè)商和余數(shù),如此進(jìn)行,直到商為0時(shí)為止,然后把先得到的余數(shù)作為十六進(jìn)制數(shù)的低位有效位,后得到的余數(shù)作為十六進(jìn)制數(shù)的高位有效位,依次排列起來。
參考代碼:
#include?"stdio.h"?
int?main()?
{?
int?num,a[100],i=0,m=0;?
char?hex[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
scanf("%d",num);?
while(num0)?
{?
a[i++]=num%16;?
num=num/16;?
}?
printf("轉(zhuǎn)化為十六進(jìn)制的數(shù)為:");?
for(i=i-1;i=0;i--)//倒序輸出?
{?
m=a[i];
printf("%c",hex[m]);?
}?
printf("\n");?
}
/*
運(yùn)行結(jié)果:
17
轉(zhuǎn)化為十六進(jìn)制的數(shù)為:11
*/
代碼如下:
#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("請(qǐng)輸入一個(gè)十進(jìn)制整數(shù):");?
scanf("%d",num);?
while(num0)?
{?
yushu=num%16;?
a[i++]=yushu;?
num=num/16;?
}?
printf("轉(zhuǎn)化為十六進(jìn)制的數(shù)為:0x");?
for(i=i-1;i=0;i--)//倒序輸出?{
m=a[i];
printf("%c",hex[m]);?
}?
printf("\n");?
}
程序運(yùn)行結(jié)果:
擴(kuò)展資料
C語言中,十進(jìn)制轉(zhuǎn)換十六進(jìn)制,可以先輸入十進(jìn)制整數(shù),然后去拼十六進(jìn)制,十六進(jìn)制由數(shù)字 0~9、字母 A~F 或 a~f(不區(qū)分大小寫)組成,使用時(shí)必須以0x或0X(不區(qū)分大小寫)開頭,只需把二進(jìn)制除以16得到余數(shù)去上面定義的hex[16]數(shù)組進(jìn)行取值接可以得到轉(zhuǎn)換的數(shù)字。
參考資料:百度百科-十六進(jìn)制