scanf十六进制长字节数组

时间:2017-10-22 04:51:53

标签: c scanf

我有一个格式如下的文件:

0 b71b3a8de0c18abd2e56ec5f4efc4af2ba084604
1 4bec20891a68887eef982e9cda5d02ca8e6d4f57

第一个值是整数,第二个整数是以十六进制编码的20字节值。我希望能够使用fscanf循环读取这两个值,如下所示:

FILE *file = fopen("file.txt", "r");
int id;
char hash[20];
while(fscanf(has_chunks, "%i %40x\n", &id, c_hash) == 2){
   // Do Stuff
}

然而,这显然不起作用,因为%40x期望一个无符号的int指针,但这不足以容纳该值。我知道我可以做多个格式化程序,比如%x%x%x,但这看起来并不优雅。有没有更好的方法可以使用fscanf

来完成此操作

1 个答案:

答案 0 :(得分:1)

 for(int i=1; i <= 100; i++)
        {
            Thread.Sleep(1000);
            forOddOutput.Text = i.ToString();
        }

每对字符都在b7 1b 3a 8d e0 c1 8a bd 2e 56 ec 5f 4e fc 4a f2 ba 08 46 04 0之间。这适合一个字节,或0xff。散列函数通常也需要unsigned char

使用以下转换:

unsigned char