我试图将二进制文件的内容读取为带符号的int,但fread
一直将其解释为不带符号的。
我使用fopen
函数从x86汇编代码中阅读该文件:
mov rdi, file ;;File is entered as input before
mov rsi, mode ;;mode db "rb",0
sub rsp, 8
call fopen
add rsp, 8
mov [handle], rax ;I save the file handler in a variable
说文件,包含以二进制存储的数字,一个挨着另一个。如果你读这个文件,你会看到:..2
使用十六进制编辑器,我们可以看到这些数字是:
| 十六进制|以10为基数的符号8位值|
| - -|- -|
| CA认证|-5个|
| 九十|-1个|
| 三十二|五十个|
稍后我要逐字节读取每个存储值:
mov rdi, number
mov sil, 1 ;;Each number is 1 byte in size
mov rdx, 1
mov rcx, [handle]
sub rsp, 8
call fread
add rsp, 8
cmp rax, 0
jle EOF
这一部分是成功的,我设法将CA保存在number变量中。但是,调试器告诉我number变量的值为:202
这是CA的无符号值。因此我尝试使用sscanf
将其转换为有符号的对应值:
mov rdi, number
mov rsi, signed ;; signed db "%hhi",0 (As I understand it, this represents the 8 bit signed format)
mov rdx, numberInt
sub rsp, 8
call sscanf
add rsp, 8
然而,这不起作用,从RAX寄存器如何返回0值和数字仍然评估为202可以看出。
1条答案
按热度按时间roqulrg31#
C语言中的示例
和生成的代码: