Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 在汇编(masm32)中使用ReadHex函数时,是否有任何方法检测无效字符?_Assembly_Hex_Procedure_Irvine32_Masm32 - Fatal编程技术网

Assembly 在汇编(masm32)中使用ReadHex函数时,是否有任何方法检测无效字符?

Assembly 在汇编(masm32)中使用ReadHex函数时,是否有任何方法检测无效字符?,assembly,hex,procedure,irvine32,masm32,Assembly,Hex,Procedure,Irvine32,Masm32,我想创建一个程序,在输入值32位十六进制不正确时接收新值。使用ReadHex函数对此非常有用,但我不知道如何检测无效字符 我特意尝试输入无效字符,以查看它在EAX寄存器上的作用,但它只将无效字符视为0 ex4fzc变成4F0C我通常使用256字节的查找表,将“0”转换为“9”,“a”转换为“F”,将“a”转换为“F”转换为十六进制。剩余的条目可以设置为>=0x10的值,以指示无效的十六进制输入。在ReadHex返回时,不再有机会处理无效字符。ReadHex没有内置的无效字符处理。因此,无论哪种方

我想创建一个程序,在输入值32位十六进制不正确时接收新值。使用ReadHex函数对此非常有用,但我不知道如何检测无效字符

我特意尝试输入无效字符,以查看它在EAX寄存器上的作用,但它只将无效字符视为0


ex4fzc变成4F0C

我通常使用256字节的查找表,将“0”转换为“9”,“a”转换为“F”,将“a”转换为“F”转换为十六进制。剩余的条目可以设置为>=0x10的值,以指示无效的十六进制输入。

在ReadHex返回时,不再有机会处理无效字符。ReadHex没有内置的无效字符处理。因此,无论哪种方式,如果需要任何类型的无效字符处理,都不能使用ReadHex

考虑在Irvine提供的ReadString之上创建自己的ReadHex版本

以字符串形式读取输入,验证字符,将十六进制转换为二进制。验证将包括将所提供字符的ASCII码与0..9、a..f和a..f进行比较。请参阅以查看数字/字母代码。数字为0x30..0x39,小写字母为0x61..0x66,大写字母为0x41..0x46

验证字符的汇编逻辑将与从十六进制转换为二进制的逻辑齐头并进。如果要将ASCII字符转换为二进制字符,则必须编写逻辑来检查它是数字还是a..F或a..F。您必须在检查中添加一个none of the things case,这将是您的逻辑,而不是十六进制字符逻辑


你能继续吗?

十六进制数字的快速脏验证是通过ReadHex将其转换为二进制,然后返回十六进制字符串,并将大小写与输入字符串进行不敏感的比较。ReadHex使用标准输入,而不是内存缓冲区。当它返回时,十六进制字符串就丢失了。@vitsoft:ReadHex从stdin读取,并且不会将原始字符串留在任何地方,因此没有什么可比较的。这就像是scanf,而不是sscanf。