Input 如何将十六进制字符串转换为二进制?

Input 如何将十六进制字符串转换为二进制?,input,hex,mips,data-conversion,spim,Input,Hex,Mips,Data Conversion,Spim,我的问题是从用户处获取64位密钥。为此,我需要得到16个字符作为字符串,其中包含十六进制字符123456789ABCDEF。我从用户那里得到了字符串,我用下面的代码找到了字符。但我不知道如何将字符转换成4位二进制 .data insert_into: .word 8 Ask_Input: .asciiz "Please Enter a Key which size is 16, and use hex characters : " key_array:

我的问题是从用户处获取64位密钥。为此,我需要得到16个字符作为字符串,其中包含十六进制字符123456789ABCDEF。我从用户那里得到了字符串,我用下面的代码找到了字符。但我不知道如何将字符转换成4位二进制

.data 


insert_into: 
    .word 8 

Ask_Input:  
    .asciiz "Please Enter a Key which size is 16, and use hex characters : " 


key_array: 
    .space 64

.text
.globl main


main: 

    la $a0, Ask_Input 

    li $v0, 4 
    syscall 

    la $a0, insert_into 
    la $a1, 64 
    li $v0, 8
    syscall

    la $t0, insert_into
    li $t2, 0
    li $t3, 0
  loop_convert:
        lb $t1, ($t0)
        addi $t0, $t0, 1 

        beq $t1, 10, end_convert

# Now charcter is in $t1 but 
  #I dont know how to convert it to 4 bit binary and storing it


        b loop_convert

    end_convert:        

    li $v0, 10  # exit
    syscall
看看这个,你会看到9和以下数字的十六进制代码是0x9,大写字母在0x41和0x5A之间,a-Z确定它是一个数字还是一个字符,你会看到是否有一个数字它完全完成了,如果它是一个字符掩码,用0x15获得四位

如果要包含小写字母,请执行与掩蔽相同的步骤,并确定其是否为0x61和0x7A之间的字符。查看一下,您将看到9和以下数字的十六进制代码为0x9,大写字母的十六进制代码为0x41和0x5A a-Z,确定其是否为数字或字符,你可以看到是否有一个数字,如果它是一个字符掩码,用0x15获得四位


如果您想包含小写字母,请执行与屏蔽相同的步骤,并确定它是否是介于0x61和0x7A之间的字符

我不认为使用0x15作为@Joelmob的意见进行屏蔽是正确的解决方案,因为

'A' = 0x41 → 0x41 & 0x15 = 0
'B' = 0x42 → 0x42 & 0x15 = 0
'C' = 0x43 → 0x43 & 0x15 = 1
'D' = 0x44 → 0x44 & 0x15 = 4
'E' = 0x45 → 0x45 & 0x15 = 5
'F' = 0x46 → 0x46 & 0x15 = 4
它不会产生任何相关的二进制值

最简单的方法是从字符值中减去范围的下限。我将用C语言给出这个想法,您可以轻松地将其转换为MIPS asm


如果“0”我不认为用0x15作为@Joelmob的观点进行掩蔽是正确的解决方案,因为

'A' = 0x41 → 0x41 & 0x15 = 0
'B' = 0x42 → 0x42 & 0x15 = 0
'C' = 0x43 → 0x43 & 0x15 = 1
'D' = 0x44 → 0x44 & 0x15 = 4
'E' = 0x45 → 0x45 & 0x15 = 5
'F' = 0x46 → 0x46 & 0x15 = 4
它不会产生任何相关的二进制值

最简单的方法是从字符值中减去范围的下限。我将用C语言给出这个想法,您可以轻松地将其转换为MIPS asm

如果“0”