�"og:type" content="webpage">�" /> �"> 编一个程序,输入十六进制的数,输出相应的十进制数_CMS教程_内存溢出

阅读 5

编一个程序,输入十六进制的数,输出相应的十进制数,第1张

#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语言编辑,求大神指点哇、如何打开十六进制编辑器等相关内容

解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:

内存溢出

原文地址:

http://outofmemory.cn/zz/9294069.html
函数
(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
可见一般 可见一般 一级用户组
excel表格中,为什么有些单元格没有填内容
上一篇
2023-04-26
window7结束电脑程序的快捷键
2023-04-26

发表评论
请登录后评论... 登录
提交

    评论列表(0条)
保存
{label} {label}