×

十进制转十六进制c语言 十进制 十六进制

c语言编程 把十进制转换为十六进制?帮我转下十六进制,转成十进制,在线等!

admin admin 发表于2022-06-27 00:22:31 浏览104 评论0

抢沙发发表评论

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
-十进制