2

我正在编写一个程序来读取stdin,然后将它读取的内容写入stdout,对它找到的任何转义的十六进制数字进行转义。我想读的所有数字都是 8 位的。这就是我到目前为止所拥有的

while((c = fgetc(stdin)) != EOF) {
    if(c == '%') {
        fscanf(stdin,"%x",&r);
        printf("%i \n",r);
    }
}

这很好用,除了当我%FFF向标准输入写入类似内容时,它会将其读取为 3 位十六进制数字。我应该如何限制fscanf只阅读 2 个字符?我曾考虑将接下来的 2 个字符读入缓冲区sscanf'ing,但对我来说感觉相当不雅。

4

1 回答 1

7

如果您希望scanf(et al) 只读取两个字符,请告诉它这样做:

scanf("%2x", &r);

有关格式的信息,请参见例如此参考。scanf

于 2013-07-23T08:18:56.323 回答