从文件转换十六进制ASCII字符串并创建二进制文件

萨文

我对C编程的经验很少,并且在创建需要用C编写的小实用程序的过程中(由于目标上可用编译器的限制),该实用程序将读取包含HEX BYTE ASCII字符串的文本文件(以下示例,通常)文件太长),并保存包含字节字符的输出二进制文件。

输入的TEXT文件示例:*文本文件的行长始终为32个字符,但最后一行小于32个字符但可被2整除。

717585003C6A3578D1EE2FF5FE850654
D234E41D350F5CCDDCCD7F0D15131FDF
C56EFE36A16D0E1AAE520CE531D8B173
EF

样本输出二进制文件:

qu….<j5…Ñî/õþ….T.Ò4DÝ5õ\ÍÜÍ.....ß.Ånþ6.m..®R.å1.±s.ï

在HEX编辑器中看到的示例输出;我以粗体显示的差异

71758500 3C6A35 85 D1EE2FF5 FE850654 D234 44DD 35 F5 5CCD DCCD7F0D 15131FDF C56EFE36 16 6D0E1A AE520CE5 31 81 B173 EF

到目前为止,这是我的工作;

#include <stdio.h>

#define MAXLINE 100

int main() {

    FILE *fr, *fw;
    char str[MAXLINE];
    char* iFile = "A0.txt";
    char* oFile = "APU.bin";
    int i, iNum;
    char b2[2];

    fr = fopen(iFile, "r");
    fw = fopen(oFile, "wb");

    while (fgets(str, MAXLINE, fr) != NULL)
        {
            printf("\n%s", str);
            for(i=0; i< strlen(str);i+=2)
                {
                if (str[i] == '\n')
                    break;
                b2[0] = str[i];
                b2[1] = str[i+1];
                iNum = (int) strtol(b2, NULL, 16);
                printf("\n%s  %c ", b2,iNum);
                fputc((char) iNum,fw);
                }
        }
    fclose(fr);
    fclose(fw);

    return 0;
}

可以看出,输出与输入的精度不是100%准确,某些字节由于某些原因未得到翻译,我尚未弄清楚。救命。

***最终代码:


#include <stdio.h>

#define MAXLINE 100

int main(int argc, char *argv[]) {
    FILE *fr, *fw;
    char str[MAXLINE];
    char *iFile, *oFile;
    int i, iNum;
    char b2[3];
    b2[2] = '\0';

    if (argc != 3)
        goto err1;

    iFile = argv[1];
    oFile = argv[2];

    if ((fr = fopen( iFile, "r")) == NULL)
            goto err1;

    if ((fw = fopen( oFile, "wb")) == NULL)
            goto err1;
    
    while (fgets(str, MAXLINE, fr) != NULL)
        {
            for(i=0; i< strlen(str);i+=2)
                {
                if (str[i] == '\n')
                    break;
                b2[0] = str[i];
                b2[1] = str[i+1];
                iNum = (int) strtol(b2, NULL, 16);
                fputc((int) iNum,fw);
                }
        }
    fclose(fr);
    fclose(fw);

    return 0;
    
    err1:
    printf("\nError Occured");
    printf("\n\nUsage: prog textin outbin\n");
    return -1;
}
卡米尔库克

好的代码!无论如何:

    char b2[2];  
    ...
            b2[0] = str[i];
            b2[1] = str[i+1];
            iNum = (int) strtol(b2, ...)

strtol需要一个零终止的字符串。b2不是零终止的,代码就是无效的。做:

    char b2[3];
    b2[2] = '\0';
    ...
            b2[0] = str[i];
            b2[1] = str[i+1];
            // b2[2] always be '\0'
            iNum = (int) strtol(b2, ...); // ok

另外,您也可以选择一个更好的变量名b2,例如tempstring编写描述性代码将帮助减少错误。

fputc((char) iNum,fw);

不强制转换-fputc输出一个未签名的字符作为一个字符int只是

fputc(iNum, fw);

您的代码错过了错误检查日志-fopen错误,strtol错误和带有偶数个字符的处理行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将二进制字符串(ASCII)转换为二进制文件

来自分类Dev

以二进制模式将十六进制字符串写入文件

来自分类Dev

将十六进制字符串转换为二进制字符串

来自分类Dev

将十六进制字符串转换为二进制

来自分类Dev

二进制字符串转换为十六进制c ++

来自分类Dev

将十六进制字符串转换为二进制并使用netcat发送

来自分类Dev

将十六进制字符串转换为二进制SQL Server

来自分类Dev

将十六进制字符串作为二进制数据写入新的 .mid 文件

来自分类Dev

使用awk将二进制数作为字符串存储在文本文件中,然后转换为十六进制

来自分类Dev

C ++将带有“:”的十六进制字符串转换为原始的“二进制”字符串

来自分类Dev

Java:将二进制字符串转换为十六进制字符串

来自分类Dev

将十六进制字符串转换为二进制字符串C#

来自分类Dev

将二进制字符串转换为十六进制字符串JAVA

来自分类Dev

颤振如何将十六进制字符串转换为二进制字符串?

来自分类Dev

十六进制值的常规字符串到二进制字符串

来自分类Dev

十六进制字符串到二进制字符串

来自分类Dev

从十六进制,二进制,八进制转换文件

来自分类Dev

读取文件为二进制/十六进制

来自分类Dev

将文件转换为二进制文件(进行十六进制转储)

来自分类Dev

将文件转换为二进制文件(进行十六进制转储)

来自分类Dev

在Windows上将文件的十六进制转储转换为二进制(程序)文件?

来自分类Dev

将任何文件转换为二进制字符串并从二进制转换为文件

来自分类Dev

在Elixir中将二进制字符串转换为十六进制,反之亦然

来自分类Dev

如何在目标C中将十六进制字符串转换为二进制数据

来自分类Dev

如何在目标C中将十六进制字符串转换为二进制数据

来自分类Dev

在java中将包含64位的二进制字符串转换为十六进制?

来自分类Dev

将十六进制字符串转换为二进制并分离为位 n C++

来自分类Dev

如何从十六进制字符串构建二进制数组

来自分类Dev

如何在C ++中十六进制protobuf的二进制字符串?

Related 相关文章

  1. 1

    将二进制字符串(ASCII)转换为二进制文件

  2. 2

    以二进制模式将十六进制字符串写入文件

  3. 3

    将十六进制字符串转换为二进制字符串

  4. 4

    将十六进制字符串转换为二进制

  5. 5

    二进制字符串转换为十六进制c ++

  6. 6

    将十六进制字符串转换为二进制并使用netcat发送

  7. 7

    将十六进制字符串转换为二进制SQL Server

  8. 8

    将十六进制字符串作为二进制数据写入新的 .mid 文件

  9. 9

    使用awk将二进制数作为字符串存储在文本文件中,然后转换为十六进制

  10. 10

    C ++将带有“:”的十六进制字符串转换为原始的“二进制”字符串

  11. 11

    Java:将二进制字符串转换为十六进制字符串

  12. 12

    将十六进制字符串转换为二进制字符串C#

  13. 13

    将二进制字符串转换为十六进制字符串JAVA

  14. 14

    颤振如何将十六进制字符串转换为二进制字符串?

  15. 15

    十六进制值的常规字符串到二进制字符串

  16. 16

    十六进制字符串到二进制字符串

  17. 17

    从十六进制,二进制,八进制转换文件

  18. 18

    读取文件为二进制/十六进制

  19. 19

    将文件转换为二进制文件(进行十六进制转储)

  20. 20

    将文件转换为二进制文件(进行十六进制转储)

  21. 21

    在Windows上将文件的十六进制转储转换为二进制(程序)文件?

  22. 22

    将任何文件转换为二进制字符串并从二进制转换为文件

  23. 23

    在Elixir中将二进制字符串转换为十六进制,反之亦然

  24. 24

    如何在目标C中将十六进制字符串转换为二进制数据

  25. 25

    如何在目标C中将十六进制字符串转换为二进制数据

  26. 26

    在java中将包含64位的二进制字符串转换为十六进制?

  27. 27

    将十六进制字符串转换为二进制并分离为位 n C++

  28. 28

    如何从十六进制字符串构建二进制数组

  29. 29

    如何在C ++中十六进制protobuf的二进制字符串?

热门标签

归档