ansi c fread 16位整数并将其写入ascii文本文件

ansi c fread 16位整数并将其写入ascii文本文件,c,C,我有一个包含16位整数数据的二进制文件,我想将其转换为ASCII可读数据 我的问题是如何使用fread(&buffer,sizeof(buffer)或16,1,fp)读取文件并再次使用fwrite(buffer,sizeof(buffer)/7,1,file)将数据写入文件 fread中的16是16位的,我想知道它去哪里了,或者以什么形式去了,如果在fwrite中,我会把7放在7位 请提供一个C语言的代码片段示例。我希望生成的文件是一个普通的可读文本文件。您有很多东西让人困惑 假设buffer的

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

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

fread中的16是16位的,我想知道它去哪里了,或者以什么形式去了,如果在fwrite中,我会把
7
放在7位


请提供一个C语言的代码片段示例。我希望生成的文件是一个普通的可读文本文件。

您有很多东西让人困惑

假设
buffer
的大小神奇地适合文件
uint8\t
数组,您可以使用以下方法(从二进制模式下的文件
fopen()
ed)读取它:

如果它没有失败的话,这将为您提供
缓冲区中的所有位

然后,输出为:

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);
}
FILE*const out=fopen(“numbers.txt”、“wt”);
if(out!=NULL)
{
对于(大小i=0;i

这假设二进制文件中的字节顺序很小。将
此处
赋值中的索引交换为big-endian。它还假定为无符号16位数字。

在将代码调整为结果下方后,我得到无符号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);

}

“包含16位整数数据的二进制文件”Big-Endian还是Little-Endian?以及:它是有符号整数还是无符号整数?那么您当前的代码有什么问题?顺便说一句,请注意,您可以在这里对代码段使用代码格式,这将使您的问题更具可读性。此外,“请提供一个代码片段”(不显示您尝试过的内容或上下文中的其他代码)这类问题通常不会被这么多人接受……这里有一个令人沮丧的问题:无论是在
fread
还是
fwrite
中,您都不能使用随机位数。重新考虑你的方法。Psst:
“%hu”
和/或抛出论点。@wildplasser谢谢,这是不必要的混淆。现在使用
unsigned int
来解决这个复杂问题。here将被无声地提升为unsigned int。我仍然喜欢h modifyer;-)顺便说一句:你在这里假设bigendian…我想我的文件是little-endian。我试过从“展开”中获得的代码,我认为我的文件是小尾端字节。我试过从“展开”中获得的代码,就像你也有不一致的“已签名/未签名”一样。
 #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