#include "stdioh"
main()
{
char a[8];
int i=0;
unsigned long nResult=0;
for(i=0;i<8;i++)
a[i]='\0';
::scanf("%s",&a);
for(i=0;i<8;i++)
{
if(a[i]=='\0')
break;
nResult=16;
if(a[i]>='0'&&a[i]<='9')
{
nResult+=(a[i]-'0');
}
else if(a[i]>='A'&&a[i]<='F')
{
nResult+=(a[i]-'A'+10);
}
else if(a[i]>='a'&&a[i]<='f')
{
nResult+=(a[i]-'a'+10);
}
else
{
::printf("输入的数据不合法!\r\n");
break;
}
}
::printf("%ld",nResult);
}
段错误。
原因在于rxdata1为常量字符串的指针,作为实参传递给ASCItoHEX函数,在该函数内对其进行了修改改,这就引起了段错误。
解决办法:进行转换的字符(也就是rxdata1[]的内容)改为运行时确定,也就是在运行时由用户输入,代码第29行不要进行初始化!电脑自带就有,开始->程序
->附件->计算器
看菜单栏,有一个查看,里面有标准型和科学型
默认的是标准型,选为科学型即可
里面有二进制 八进制 十进制 十六进制 可以相互转换,非常方便
CODE SEGMENT
ASSUME CS:CODE
MAIN PROC FAR
START:
CALL DEC_BIN
CALL BIN_HEX
call dec_bin1
call BINIDEC
MOV AH,4CH
INT 21H
RET
MAIN ENDP
DEC_BIN PROC NEAR
MOV BX,0
GET_CHAR:MOV AH,1
INT 21H
CMP AL,0DH
JE EXIT
SUB AL,30H
JL EXIT
CMP AL,9
JG EXIT
CBW
XCHG AX,BX
MOV CX,10
MUL CX
XCHG AX,BX
ADD BX,AX
JMP GET_CHAR
EXIT:
mov dl,0ah
mov ah,2
int 21h
RET
DEC_BIN ENDP
BIN_HEX PROC NEAR
MOV CH,4
ROTATE:MOV CL,4
ROL BX,CL
MOV AL,BL
AND AL,0FH
ADD AL,30H
CMP AL,3AH
JL DISPLAY
ADD AL,7H
DISPLAY:MOV DL,AL
MOV AH,2
INT 21H
DEC CH
JNZ ROTATE
mov dl,0ah
mov ah,2
int 21h
RET
BIN_HEX ENDP
DEC_BIN1 PROC NEAR
MOV BX,0
GET_CHAR1:MOV AH,1
INT 21H
CMP AL,0DH
JE EXIT1
SUB AL,30H
JL EXIT1
CMP AL,9
Jle t0
SUB AL,7H
CMP AL,15
jg exit1
t0:CBW
XCHG AX,BX
mov cl,4
rol ax,cl
ADD BX,AX
JMP GET_CHAR1
EXIT1:mov dl,0ah
mov ah,2
int 21h
RET
DEC_BIN1 ENDP
BINIDEC PROC NEAR
MOV CX,1000
CALL DEC_DIV
MOV CX,100
CALL DEC_DIV
MOV CX,10
CALL DEC_DIV
MOV CX,1
CALL DEC_DIV
RET
BINIDEC ENDP
DEC_DIV PROC NEAR
MOV AX,BX
MOV DX,0
DIV CX
MOV BX,DX
CMP AL,9
ADD AL,30H
MOV DL,AL
MOV AH,2
INT 21H
RET
DEC_DIV ENDP
CODE ENDS
END START以上就是关于编一个程序,输入十六进制的数,输出相应的十进制数全部的内容,包括:编一个程序,输入十六进制的数,输出相应的十进制数、ASCII码转换16进制,C语言编辑,求大神指点哇、如何打开十六进制编辑器等相关内容
评论列表(0条)