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;}-十进制
扩展资料:
还有3种方式可以实现,其中两种是使用系统函数,另一种是直接自己编写。
下面的代码就是3种方式的实现,包括2位的整数和任意整数(2的31次方以内)都可以。可自己选择需要的实现方式。
利用系统函数有
1. char * itoa ( int value, char * str, int base );value是要转化的数字,str是转化后的字符串存储的位置,base是进制数(但是这个函数不是标准C函数,有些编译器是不支持的!)。所以代码可以为:-十六进制
char buffer ; //用于存放转换好的十六进制字符串,可根据需要定义长度 char * inttohex(int aa){ itoa (aa, buffer, 16); return (buffer);} -十进制
2. sprintf(str,“%x“,value);str是转化存储的位置,%x表示十六进制格式,value是要转化的数字。所以代码可以为:
char buffer ; //用于存放转换好的十六进制字符串,可根据需要定义长度 char * inttohex(int aa){ sprintf(buffer, “%x“, aa); return (buffer);}-十六进制
3. 自己编写
如果参数只要两位数的整数,那么很简单。
代码如下:
#include 《stdio.h》#include 《stdlib.h》 char buffer ; //用于存放转换好的十六进制字符串,可根据需要定义长度 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;}-十六进制
帮我转下十六进制,转成十进制,在线等!
96816799268708906688066280224820462802862042666660280866888604244260682624222,
来自于百度任意进制转换工具
代码转换(编程实现大小写字母、二进制数和十六进制数之间的转换以及十六进制数向十进制数的转换)
data segment
string1 db ’Please input a letter:’,0dh,0ah,’$’
string2 db 0dh,0ah,’Please intput again:’,0dh,0ah,’$’
string2 db 0dh,0ah,’SUSSESS QUIT’,0dh,0ah,’$’
data ends
code segment
assume cs:code,ds:data
main proc
start: mov ax,data
mov ds,ax
call transform
mov ah,4ch ;结束
int 21h
main endp ;主程序结束
transform proc ;子程序开始
lea dx,string1
mov ah,09h
int 21h
again: mov ah, 01h
int 21h ;键盘接收一个字符并显示
cmp al,35h
je quit
cmp al, 41h
jb wrong ;小于41h说明输入的不是字母,显示出错,
cmp al,5ah ;判断是否落在大写字母范围内
ja next ;没落在大写字母范围内,就需要继续判断是否在小写字母范围内
add al,20h ;若是大写字母,则改成小写字母
jmp display ;显示
next: cmp al,61h ;跟61h比较如果小于则不是字母,显示出错
jb wrong
cmp al,7ah ;再跟7ah比较,看是否落在小子字母范围内
ja wrong
sub al,20h ;将小写字母变成大写字母
jmp display
wrong: lea dx,string2
mov ah,9
int 21h
jmp again
display:
mov ah,02h ;显示
mov dl,al
int 21h
jmp again
quit: lea dx,string3
mov ah,09h
int 21h
ret
transform endp
code ends
end start
codes segment
assume cs:code
START:
mov bx,0
loop1:
mov ah,1h
int 21h
cmp al,0dh ;比较是不是回车键
je print ;如果是表示输入完毕
cmp al,’0’
jz rotate
stc ;此指令设置cf为1
rotate:
rcl bx,1 ;带进位左移
jmp loop1
print:
mov dl,0dh ;指令打印回车
mov ah,2h
int 21h
mov dl,0ah ;打印换行
mov ah,2h
int 21h
mov cl,4 ;将BX中的二进制数每4位划成一组
mov ch,4
loop2:
rol bx,cl
mov dl,bl
and dl,0fh ;按组求对应的ASCII码送显示器
add dl,30h
cmp dl,3ah
jb loop3
add dl,7h ;A的ASCII码值比9的大7
loop3:
mov ah,2h
int 21h
dec ch
jnz loop2
exit:mov ah,4ch
int 21h
codes end
end start
code segment
main proc far
assume cs:code
start:
call A1 ;16进制转换成2进制
call crlf ;换行
call binidec ;2进制转换成10进制
call crlf
jmp main ;光标等待下一个输入
ret
main endp
A1 proc near
mov bx,0 ;设置BX初始值为0
char:
mov ah,01h ;从键盘输入
int 21h
sub al,30h ;从ASCII码转换为2进制
jl exit
cmp al,10d ;判断是数字还是字母
jl A2 ;小于(数字)转移到A2
sub al,27h ;判断输入的是否’a’-’:’之间的字符
cmp al,0Ah
jl exit
cmp al,10h
jge exit
A2: ;叠加
mov cl,4
shl bx,cl ;逻辑左移4位
mov ah,0
add bx,ax
jmp char
exit:
ret
A1 endp
binidec proc near ;二进制转换成是进制(除10取余)
mov cx,10000d
call dec_div
mov cx,1000d
call dec_div
mov cx,100d
call dec_div
mov cx,1000d
call dec_div
mov cx,10d
call dec_div
mov cx,1d
call dec_div
ret
dec_div proc near ;求余运算
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h ;转换成ASCII码
mov ah,02h
int 21h
ret
dec_div endp
crlf proc near
mov dl,0Ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
ret
crlf endp
code ends
end start
-十进制