我有一个包含16位整数数据的二进制文件,我想将其转换为ASCII可读数据。
我的问题是如何使用fread(&buffer,sizeof(buffer)
或16,1,fp);
来读取文件并再次使用fwrite(buffer, sizeof(buffer)/7, 1, file);
将数据写入文件。
fread
中的<16>是16位,并想知道它的去向或形式,如果在fwrite中我会将7
用于7位。
请在C中提供代码片段示例。我希望将生成的文件作为普通的可读文本文件。
答案 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