Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将文件中的十六进制数据转换为ascii_C - Fatal编程技术网

将文件中的十六进制数据转换为ascii

将文件中的十六进制数据转换为ascii,c,C,我想解码一个ASN.1标准二进制文件。我已将二进制文件转换为十六进制,并将其存储在一个文件中。现在我想把这个十六进制转换成ascii。我现在的问题是如何读取十六进制文件 文件看起来是这样的, 81 01 32 82 0D 35 31 34 34 31 38 38,其中81是标题,01是大小,32是数据。同样,82是标题,这将继续下去如何读取此文件并区分存在的各个字段 我在网上到处找这个,但没有得到满意的答案。有人能帮我找到前进的道路吗。我不需要任何代码,只需要我能做的过程。我会先读取标题,然后在

我想解码一个ASN.1标准二进制文件。我已将二进制文件转换为十六进制,并将其存储在一个文件中。现在我想把这个十六进制转换成ascii。我现在的问题是如何读取十六进制文件

文件看起来是这样的, 81 01 32 82 0D 35 31 34 34 31 38 38,其中81是标题,01是大小,32是数据。同样,82是标题,这将继续下去如何读取此文件并区分存在的各个字段


我在网上到处找这个,但没有得到满意的答案。有人能帮我找到前进的道路吗。我不需要任何代码,只需要我能做的过程。

我会先读取标题,然后在循环中读取数据。您可以使用“x”说明符读取十六进制数字(比如您的文件名为
hexfile.txt
):

#包括
int main()
{
文件*流;
无符号整数h,l,d;
if((stream=fopen(“hexfile.txt”,“r”))==NULL)返回1;
而(EOF!=fscanf(流、%x%x、&h和&l))
{
printf(“%02X%02X\n”,h,l);

对于(未签名的i=0;iuse
fscanf(文件指针,“%d%d%d”、&头、大小和数据)
一次读取3个字节time@Santosh:
%d
不读取十六进制。此外,您最好只读取头和大小,然后将数据放入循环中。是的,我也考虑过将数据放入循环中。但不能这样做,因为头大小不总是1字节(上面的示例有1字节头,但不总是相同)如果有多个字节地址,我不能增加1。还有@santosh,你想一次读取3个字节吗?查看下一个字段的数据。它有13个字节长。为什么你要将文件转换为十六进制,然后尝试读取十六进制?为什么不使用原始二进制文件?根据这些文件的大小,你可以读取请将内容放入
无符号字符数组中,或逐字节读取.thnx以获取帮助。但是,在读取文件时,您如何知道哪些数据表示标头?@Madhav:因为您描述了它:标头长度数据标头长度数据标头长度数据。。。
#include <stdio.h>

int main ()
{

    FILE *stream;
    unsigned int h, l, d;

    if( (stream  = fopen( "hexfile.txt", "r" )) == NULL ) return 1;

    while (EOF != fscanf (stream, " %x %x", &h, &l))
    {
        printf ("%02X %02X\n",h,l);

        for (unsigned i=0; i<l; ++i)
        {
            if (EOF == fscanf (stream, " %x", &d)) break;
            printf ("%02X ",d);
        }
        puts ("");
    }

    fclose (stream);

    return 0;
}