c - 从文本文件中读取十六进制

标签 c hex scanf

我是 C 的新手,想问一下我已经纠结了一段时间的以下问题。 :( 请帮忙!

我想读取一个明文文件 passout.txt,其中包含一串十六进制的字符串,例如:

A1B2C3D4E5403E9D501B223AD45523D6

并将它们放入一个数组中:

{A1, B2, C3, D4, E5, 40, 3E, 9D, 50, 1B, 22, 3A, D4, 55, 23, D6}

但是,我目前的输出只有:

{D4, 55, 23, D6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}

只能取回最后四位十六进制!我真的不知道我犯了什么错误,我在网上找不到任何相关的解决方案!因此,有人愿意帮忙吗?

这是我的代码!

#include <stdio.h>
#include <string.h>
#include <openssl/aes.h>

#define AES_BLOCK_SIZE 16

void main()
{
    FILE *ifp;
    int i, rv;
    unsigned char in[AES_BLOCK_SIZE] = {0};

    ifp = fopen("passout.txt", "r");

    // loop and read the input file
    for(i = 0; i < AES_BLOCK_SIZE; i++)
    {
        rv = fscanf(ifp, "%X", &in[i]);
        if(rv != 1)
            i = AES_BLOCK_SIZE;
    }

    printf("Print result: \n");
    for(i=0; i < AES_BLOCK_SIZE; i++)
        printf("%X ",*(in+i));
    printf("\n");   

    fclose(ifp);
}

最佳答案

rv = fscanf(ifp, "%X", &in[i]);

改为

rv = fscanf(ifp, "%2hhX", &in[i]);

C99之前

unsigned X;
rv = fscanf(ifp, "%2X", &X);
if(rv != 1)
    break;
in[i] = (unsigned char)X;

关于c - 从文本文件中读取十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24328235/

相关文章:

c - c中的结构默认值

c++ - 具有互斥量的多个锁和死锁的可能性

java - 在java中的十六进制字符串中应用2的补码

日历项目几乎用 C 完成

c - 使用 fscanf() 用文件信息填充 C 中的链表,它不是在读取文件的第一行吗?

c - 逐行读取的 shell

c - Libsodium 签名并验证

C编程: How to program for Unicode?

c++ - (Qt C++) setw/setfill 等效?

c - gmp_printf() - 以十六进制/base16 打印