ansi c fread 16位整数并将其作为ascii文本文件进行翻译

时间:2014-05-28 09:45:24

标签: c

我有一个包含16位整数数据的二进制文件,我想将其转换为ASCII可读数据。

我的问题是如何使用fread(&buffer,sizeof(buffer)16,1,fp);来读取文件并再次使用fwrite(buffer, sizeof(buffer)/7, 1, file);将数据写入文件。

fread中的<16>是16位,并想知道它的去向或形式,如果在fwrite中我会将7用于7位。

请在C中提供代码片段示例。我希望将生成的文件作为普通的可读文本文件。

2 个答案:

答案 0 :(得分:0)

你有很多令人困惑的事情。

假设buffer是一个神奇的大小以适合文件uint8_t数组,您可以读取它(来自二进制模式下的文件fopen() )使用:

fread(buffer, sizeof buffer, in);

如果它没有失败,它会给你buffer中的所有位。

然后,输出就是:

FILE * const out = fopen("numbers.txt", "wt");
if(out != NULL)
{
  for(size_t i = 0; i < sizeof buffer; i += 2)
  {
    const unsigned int here = buffer[i] + 256 * buffer[i + 1];
    fprintf(out, "%u\n", here);
  }
  fclose(out);
}

这假设二进制文件中的little-endian字节排序。为big-endian交换here作业中的索引。它还假设无符号的16位数字。

答案 1 :(得分:-1)

在调整我的代码后,我得到unsigned int,因为我期望数据结果带有字母字符。我可以添加哪些附加代码将其按字母顺序排列?

 #include<stdio.h>
    int main()
       {
    FILE *fp,*out;
  char buffer[256];
          size_t i = 0;
            fp=fopen("c:/Gosam/input.txt", "rb");
            if(out != NULL)
           {
            fread(buffer, sizeof buffer,1, fp);
              }
        out = fopen("c:/Gosam/res.txt", "w");
if(out != NULL)
{
   // buffer = (char*) malloc (sizeof(char)*Size);

  for( i = 0; i < sizeof(buffer); i += 2)
  {
    const unsigned int var = buffer[i] + 256 * buffer[i + 1];
    fprintf(out, "%u\n", var);
  }
  fclose(out);
}
fclose(fp);

}

这些是我的结果,但我想把它们变成字母字符串。

263
4294966987
4294967222
4294967032
64
4294967013
73
4294967004
90
4294967028
83
4294966975
37
4294966961
5
4294966976
82
4294966942
4294967022
4294966994
11
4294967024
29
4294966985
4294966986
4294966954