【问题标题】:Convert File Content in to Hex format将文件内容转换为十六进制格式
【发布时间】:2012-05-31 08:05:12
【问题描述】:

这里我有一个文件testdec.txt。 在这个文件中的内容如下。

N = 162,27,79,83,101,69,213,78,188,215,254,75,222,74,204,124,53,108,240,157,213,109,189,143,226,71,120,134,57,27,64,230,126,218,4,249,150,44,182,223,70,241,96,113,61,115,54,13,209,53,236,157,164,126,202,150,121,13,180,223,50,84,239,39,188,44,119,71,50,220,196,107,218,66,106,24,203,13,150,135,231,65,240,236,32,226,166,2,243,26,236,253,185,88,196,58,255,146,93,202,57,219,57,160,62,160,225,167,0,209,231,110,156,106,8,119,47,255,46,87,76,10,243,99,48,147,47,197
E = 1,0,1 

在这里,我想将N and E 值转换为十六进制格式,并希望将每个十进制值写入两个字节的十六进制值,而没有comma 分隔符。我想将此十六进制值写入另一个 testhex.txt 文件中。

如果十进制值只是十六进制的一个字节,我必须在该十六进制值前面添加0。 你可以在E的值中看到这个东西。`

我想在其他文件或同一个文件中做这些事情。可能在另一个文件中是可能的。我们不能在同一个文件中做。

我想要另一个testhex.txt 文件输出文件,比如

N = A21B4F536545D54EBCD7FE4BDE4ACC7C356CF09DD56DBD8FE2477886391B40E67EDA04F9962CB6DF46F160713D73360DD135EC9DA47ECA96790DB4DF3254EF27BC2C774732DCC46BDA426A18CB0D9687E741F0EC20E2A602F31AECFDB958C43AFF925DCA39DB39A03EA0E1A700D1E76E9C6A08772FFF2E574C0AF36330932FC5
E = 010001

那么我怎样才能实现这个目标。请给我建议。

编辑:也尝试使用此 testdec.txt 根据 BLUEPIXY 代码,它已进入无限循环。

N = 137,72,247,73,196,168,11,223,107,232,230,189,125,211,175,123,12,235,2,231,123,244,84,184,214,143,144,189,38,103,237,173,129,68,158,92,8,141,76,60,76,98,54,39,7,48,148,45,76,105,52,191,255,245,117,156,25,122,244,65,79,110,244,17,23,110,128,239,117,70,46,140,178,75,230,126,242,100,77,194,42,187,241,110,218,215,242,118,186,92,133,26,175,167,158,16,113,123,105,114,161,23,79,197,76,102,103,93,230,174,120,128,194,34,104,42,253,131,122,49,30,212,205,237,119,71,108,95
E = 1,0,1 
N = 137,72,247,73,196,168,18,223,107,232,230,189,125,211,175,123,12,235,2,231,123,244,84,184,214,143,144,189,38,103,237,173,129,68,158,92,8,141,76,60,76,98,54,39,7,48,148,45,76,105,52,191,255,245,117,156,25,122,244,65,79,110,244,17,23,110,128,239,117,70,46,140,178,75,230,126,242,100,77,194,42,187,241,110,218,215,242,118,186,92,133,26,175,167,158,16,113,123,105,114,161,23,79,197,76,102,103,93,230,174,120,128,194,34,104,42,253,131,122,49,30,212,205,237,119,71,108,95
E = 1,0,1 

【问题讨论】:

  • @KarolyHorvath 我在这里寻找方法我该怎么做?我也为此做了一些编码。但我只想读取 N 和 E 之后的值。所以我该怎么做。这里我用 strtok 来分隔字节。

标签: c hex decimal


【解决方案1】:

一个样本

#include <stdio.h>

int main(){
    FILE *fin,*fout;
    char ch1,ch2;
    int data;

    fin=fopen("testdec.txt", "r");
    fout=fopen("testhex.txt", "w");
    while(1){
        if(EOF==fscanf(fin, "%c %c ", &ch1, &ch2))
            break;
        fprintf(fout, "%c %c ", ch1, ch2);
        while(EOF!=fscanf(fin, "%d%c%*[ \n]", &data, &ch1)){
            fprintf(fout, "%02X", data);
            if(ch1 == ',') continue;
            if(ch1 == '\n' || ch1 == ' '){
                fprintf(fout, "\n");
                break;
            }
        }
    }
    fclose(fout);fclose(fin);
    return 0;
}

【讨论】:

  • fscanf("%d%c", ...) 如果数据中有字母字符或逗号错位,则可能返回 0;最好使用while (fscanf("%d%c", &amp;data, &amp;ch1) == 2) 作为内部循环中的测试。
  • 这样的user1089679会根据需要检查。
  • 这个程序只适用于两行,如果我会放更多行然后它会进入无限循环。
  • 我要编辑我的 testdec.txt 然后你可以用我的 testdec.txt 检查这个程序
  • @user1089679 - 此程序假定数据的结尾是换行符。例如。 N = 137,....,95\n E = 1,0,1\n 。但你的数据是 95\n E = 1,0,1 空间\n。如果格式正确,必须稍微修改程序。
【解决方案2】:

你试过了吗:

  • man fgets,这会从文件中读取行。
  • man strtok,这会提取由分隔符分隔的数据。
  • man atoi,这会将字符串转换为 int。
  • man fprintf,这会将 int 值作为十六进制字符串写入文件。

【讨论】:

  • E 和 N 后如何获取 Value?
  • 使用空格作为分隔符来获取整个整数列表,然后使用逗号来提取每个值。
  • strtok 给出了分隔符的前一个值(之前的值)。假设如果我将应用 strtok 那么我只得到 N = ,我想要在 N = value
  • 我为粗鲁道歉。我的目的是让你学会钓鱼而不是给你鱼。
  • 好的没问题这对我有好处。再次感谢您的帮助。
猜你喜欢
  • 2010-10-15
  • 1970-01-01
  • 2022-07-08
  • 2015-04-18
  • 1970-01-01
  • 2014-11-11
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
相关资源
最近更新 更多