㈠ 八位十六进制转二进制数的汇编源代码
;-------------------------------------------------
;可转换16位以内任意无符号数(1或8 或4 或n n<=16)
;或者修改data段 可转换更多位
;Esc键退出 回车键后就开始转换转换
;-------------------------------------------------
data segment
assume ds:data
indata db 16 p(20h)
inputinfo db 'Please input one hex=<16 bits: $'
errorinfo db 'Input error, please repeat$'
resultinfo db 'The result is : $'
newlineinfo db 0dh, 0ah, '$'
data ends
;-------------------------------------------------
;-------------------------------------------------
code segment
assume cs:code
main proc far
mov ax,data
mov ds,ax
mov es,ax
call inputdata
call hextobin
mov ah,4ch
int 21h
main endp
;--------------------------------------
;--------------------------------------
hextobin proc near
mov ah,9
mov dx,offset resultinfo
int 21h
mov si,offset indata
next:
lodsb
mov bl,al ;先备份al,因后面sub*会改变al
cmp al,20h
jz exit
cmp al,3ah ;分号
jl sub1
cmp al,47h ;G
jl sub2
cmp al,67h ;g
jl sub3
sub1:
sub al,30h ;判断0--9
jmp begin
sub2:
mov al,bl
sub al,37h ;判断A--F
jmp begin
sub3:
mov al,bl
sub al,57h ;判断a--f
jmp begin
begin:
mov cx,4 ;每4位二进制即可表示1位十六进制
mov ah,2 ;依次检验al中的低四位的0和1是循环的目的所在
mov bl,al
mov bh,8 ;8h=1000b
show:
mov dl,30h
and al,bh ;and xxxx,1000 可得 al=x000
jz tobin ;即保留了al中的最高位
mov dl,31h ;
tobin:
int 21h
mov al,bl ;恢复al
ror bh,1 ;1000b循环右移1位 变成0100b
loop show
mov ah,0
jmp next
exit:ret
hextobin endp
;---------------------------------------
;---------------------------------------
inputdata proc near
input:
mov ah,9
mov dx,offset inputinfo
int 21h
mov di,offset indata
inchar:
mov ah,1
int 21h
push ax
cmp al,1bh ;如果是Esc键,则退出
je quit
cmp al,0dh ;如果是回车,表示结束输入,则跳去转换
je hex
cmp al,67h ;三个条件区间
jnl showerr
cmp al,61h
jnl start
cmp al,47h
jnl showerr
cmp al,41h
jnl start
cmp al,3ah
jnl showerr
cmp al,30h
jnl start
start:
pop ax
mov ah,0
stosb
jmp inchar
quit:
mov ah,4ch
int 21h
hex: call newline
call hextobin
ret
showerr:
call newline
call newline
mov ah,9
mov dx,offset errorinfo
int 21h
call newline
call newline
jmp input
inputdata endp
;----------------------------------------
;----------------------------------------
newline proc near
mov dx,offset newlineinfo
mov ah,9
int 21h
ret
newline endp
;----------------------------------------
;----------------------------------------
code ends
end main
㈡ 如何将 十六进制转换成文本
有专门的软件好像叫做十六进制编辑器,电脑把十六进制转文本的就是把十六进制数值转成十进制(电脑自带计算机可以),然后新建一个文本,按住ALT-数值,就是十六进制转成十进制的5位数字,松来ALT就可以
㈢ C语言16进制如何才能转换为10进制 不要给我源代码函数我想知道原理。什么计算公式的写明白。
首先抛开你的10进制思维,再来看看如下内容。
不管是2进制,10进制,16进制,n进制,都是逢多少进1的数字规律。那么n进制的时候,就必须有n个符号代表从0~n-1的数值。
比如2进制有2个符号:0、1
比如10进制有10个符号:0、1、2、3、4、5、6、7、8、9
比如16进制有16个符号:0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f
从下边开始,你看到的10不是十进制的10,你一定要抛开进制的思维,才能看懂!(当然有1个例外:就是说明几进制的时候,是十进制的思维,不然你没法看得懂!比如12进制,是十进制的情况下理解的12,并不是12进制下的12,因为12进制下的12,这个12是12+2=14,即十进制的14)
在n进制的情况下,个位数逢n进1,也就是从0变到10要0+n,
此时10表示已经累加了n,请想想要怎么才能变为20?
没错,又得加一次n,也就是累加2*n才能变成20,继续看:
那从10如何变成100呢?因为是n进制,所以,从“十”位数的0要再往前进1,必须是“十”位数要累加n次。
也就是上边的10变到20,算1次。20变30相当于累加2次。加上00变10,算1次。所以从00变30相当于“十”位累加3次,因为上一段说了,“十”位0要往前进1,必须累加n次。
那你看看从个位数0要往前进1,也是要个位数累加n次。所以,个位数0要向“百”位进1,即0变为100,则是需要个位数累加n*n次才行的!深化解释:因为个位数累加n变为10,而“十”位也是0累计n次才能变为100,即:n倍个n才能让个位数从0变为100,即n*n=100,即“百”位是第3位数,所以从0变为100需要累加(n的3-1次方)。
同理:从0变到“1000”,是4位数,所以从0变到1000需要累加(n的4-1次方)。
同理:从0变到“1000……0”这里假设有88个0,即89位,那么从0变到“1000……0”是需要累加(n的88次方)。如果这里是有m个0,从个位数0变为这个数,个位数必须累加累加(n的m次方)
注意:n是进制。
******************************
从下边开始,讲的都是16进制,(n进制同理,就不再讲n进制了)
所以16进制代入上式,可以得到从0变到10000,是需要个位数累加16的4次方的。这里的16的4次方中的16是需要用十进制的思维去理解的(而不是16进制下的16,因为16进制下的16是16+6=22,即十进制的22等于16进制下的16。所以,这里的16的4次方中的16是实实在在的十进制的16,下同。其他还是16进制思想)。
上边知道10000就是16的4次方。那么20000,则是2*(16的4次方)。如果是80000就是8*(16的4次方),f0000就是f*(16的4次方)
同理:259fa4=200000+50000+9000+f00+a0+4
上式=2*(16的5次方)+5*(16的4次方)+9*(16的3次方)+f*(16的平方)+a*(16的1次方)+4
将上式转10进制=2*(16的5次方)+5*(16的4次方)+9*(16的3次方)+15*(16的平方)+10*(16的1次方)+4
即=2*16*16*16*16*16+5*16*16*16*16+9*16*16*16+15*16*16+10*16+4
这就是16进制转10进制的规律。
*********************
说明:如果你看不懂上边的16进制转10进制的话,你真不太适合C编程。那么就建议你学java了,可能还能找到工作
㈣ 十六进制数的原码补码反码怎么表示
无论是十进制还是十六进制的数,在求补码时,都先转化为二进制,再进行补码的转换。
例如:
15的十六进制为F,转化为二进制为00001111,再转为反码00001111,最后转化为补码00001111。
正整数的补码是其二进制表示,与原码相同。
(4)16进制怎么转成源码扩展阅读:
原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
补码的特性:
1,一个负整数(或原码)与其补数(或补码)相加,和为模。
2,对一个整数的补码再求补码,等于该整数自身。
3,补码的正零与负零表示方法相同。
参考资料来源:网络-补码
㈤ 怎样让十六进制转换成十进制,求易大神给源码
你可以下一个进制转换器
㈥ 十六进制如何转换成二进制
与十六进制数BC等值的二进制数是10111100,应该选择B项。
将十六进制数转换为二进制数,只需将每一位的十六进制数转换为相应的4位二进制数,然后组合起来即可。
二进制与十六进制之间的转换:
1、二进制数转换成十六进制数
由于2的4次方=16,所以依照二进制与八进制的转换方法,将二进制数的每四位用一个十六进制数码来表示,整数部分以小数点为界点从右往左每四位一组转换,小数部分从小数点开始自左向右每四位一组进行转换。
2、十六进制转换成二进制数
如将十六进制数转换成二进制数,只要将每一位十六进制数用四位相应的二进制数表示,即可完成转换。
㈦ 求易语言十六进制互相转换十进制源码,高手进!
十六进制 是 满16进一 电脑识别 主要是 1111 四个二进制表示一个 十六进制十六进制 包括 1~9 A~F================================十六进制和十进制可以互相换十六进制 一般采用 0x开头 0x1表示 16进制1 表示10进制 1这是约定
㈧ 用数组实现16进制转换为8进制源代码(仅限C/C++)
#include <stdio.h>
#include <math.h>
#include <string.h>
void change(char s[],char a[]) //转换函数
{
int sum = 0,i,j,len;
len = strlen(s);
for( i = len-1; i >= 0; i-- )
{
if(s[i] >= '0' && s[i] <= '9')
sum += (s[i]-'0')*pow(16,len-i-1);
else
sum += (s[i]-'A' + 10)*pow(16,len-i-1);
}
j = 0;
while(sum)
{
a[j++] = sum%8 + '0';
sum /= 8;
}
a[j] = '\0';
}
int main()
{
char s[100],a[100];
int i,j;
printf("请输入一个16进制数:");
scanf("%s",s);
printf("该数的8进制为:");
change(s,a); // 进制转换
j = strlen(a);
for( i = j -1; i >= 0; i-- )
printf("%c",a[i]);
printf("\n");
return 0;
}
㈨ 16进制的地址怎么转换成代码
地址就是地址,只是代码中的组成部分,不能够单独成为代码。
㈩ lua中怎么将16进制转换成源文件 明文内容
看你的输入端是什么编码,lua本身不提供任何编码转换功能utf-8 utf-32转utf-16基本可以纯lua实现(但考虑到蛋疼的utf-16扩展字符其实还是挺麻烦的)至于gb2312或者gbk之类的还是用第三方c库吧,比如lua-iconv或者icu-lua都行……