如果我被告知$a0 = "ABcd1234"
我将如何制作
$v0 = 1010 1011 1100 1101 0001 0010 0011 0100
我已经编写了一个程序来检查$ a0 regsiter是否有有效字符,但我很难将其转换为二进制文件。我是否只创建两个数组,一个用于十六进制值,另一个包含每个数据的相应二进制数?如果我这样做,我将如何转换它们然后将这么大的值存储到$ v0
答案 0 :(得分:0)
当你破坏了二进制文件时,很明显你知道每个十六进制数字是4位。因此,只需编写将单个数字转换为4位的代码,然后将它们一个接一个地移入目标寄存器。您可以将其组合到检查代码中,例如:
out=0
foreach(x in string)
{
if (x < '0') goto invalid;
if (x < '9' + 1) { value = x - '0'; goto valid; }
if (x < 'A') goto invalid;
if (x < 'F' + 1) { value = x - 'A' + 10; goto valid; }
if (x < 'a') goto invalid;
if (x < 'f' + 1) { value = x - 'a' + 10; goto valid; }
goto invalid;
valid:
out = (out << 4) | value;
}