C 十六进制字符转换器转换为错误字符

C 十六进制字符转换器转换为错误字符,c,char,hex,buffer-overflow,C,Char,Hex,Buffer Overflow,我正在研究缓冲区溢出攻击,我有一段代码,它将0xXX输入转换为等效的1字节ASCII字符 int main(int argc,char **argv) { char buffer[1024]; while (fgets(buffer,sizeof(buffer),stdin)) { char * rest=buffer; unsigned char hexVal; while (rest[0]!='\0') {

我正在研究缓冲区溢出攻击,我有一段代码,它将
0xXX
输入转换为等效的1字节ASCII字符

int main(int argc,char **argv) {
    char buffer[1024];
    while (fgets(buffer,sizeof(buffer),stdin)) {
        char * rest=buffer;
        unsigned char hexVal;
        while (rest[0]!='\0') {
            if (1==sscanf(rest,"0x%2hhx",&hexVal)) {
                printf("%c",hexVal);
                rest+=4;
            } else {
                printf("%c",rest[0]);
                rest++;
            }
        }
    }
    return 0;
}
当我给它输入
0x180x850x040x08
(这是
08048518
的小端版本)时,它会变成地址
bdbfef18

我不知道为什么地址被错误地解释了。

这里的东西怎么会变成地址?这个地址来自哪里?您应该看到打印的五个字符-代码24、138、4、8和10表示
“\n”
。这应该是它的结束-即没有地址。