【发布时间】:2015-04-08 02:41:09
【问题描述】:
所以我是 C 的新手。我需要编写一个程序,将整数的二进制文件作为输入,用 malloc 分配一个足够大的数组,然后使用 read() c 函数将每个整数存储在二进制文件中文件在其在数组中的相应位置。我的问题是我不知道如何区分两者。当我打印出存储在这个分配的数组空间中的数据时,它只显示作为字符串的二进制数据的 Ascii 值。 因此,例如,如果我有二进制数 0000 0001,则位置 [0]-[7] 的数组将是该二进制数中每个位的每个 ascii 值。
基本上我试图读取每一行并将该行存储在 1 个数组位置中的二进制信息的 int 表示,因此与上面的示例一样,所需的结果将是: [0] - 1. 我需要做一些转换算法吗?我相信有一种方法可以让 c 识别它的二进制信息,而不是 ascii,因为有 2 种不同的文件类型:二进制和 ASCII。任何帮助将不胜感激,在此先感谢!
P.s 我只能使用这些函数调用:open、close、read、malloc、fstat、printf
else
{
fileDescriptor = open(argv[1], O_RDONLY, 0);
if (fileDescriptor == -1){
printf("File Not Found\n");
exit(1);
}
else{
if (fstat(fileDescriptor, &fileStat) < 0){
printf("Trouble pulling statistics of file\n");
exit(1);
}
else
{
numBytes = fileStat.st_size;
filePointer = (char*) malloc(numBytes);
n = read(fileDescriptor, filePointer, (numBytes * sizeof(int)));
if( n < 0 ){
printf("Problem reading the file\n");
exit(1);
}
numerator = 0;
numCount = 0;
average = 0;
while(*filePointer != NULL)
{
numerator += *filePointer;
printf("data in array: %d\n", *filePointer);
filePointer++;
numCount++;
}
average = (double) numerator / (double) numCount;
printf("Average: %f\n", average);
printf("Total Numbers: %d\n", numCount);
}
}
【问题讨论】:
-
你说你有一个二进制文件,然后谈到从文件中读取行。 “行”是一个文本概念,二进制文件没有行,只有二进制数据。您正在使用 POSIX(打开/读取)文件函数,它不区分文本和二进制文件 - 文件只是一个字节序列,您可以将这些字节视为二进制或 ASCII 文本或 UTF-8文本或其他任何内容。
-
好的,这很有帮助。我只是很困惑,然后我应该如何逐步遍历我的 filePointer 变量指向的数组以获取相关信息。我打印出来,当我想要整数表示时,每个位置的数据仍然只是每个位的 ascii 值。在这种情况下,访问每个位置整数以计算平均值。 filePointer 是指向 char 类型的指针吗?
-
你做了很多不必要的 else 缩进,这降低了代码的可读性。请注意,在所有 if 语句中,如果条件为真,则返回或退出,因此 else { 是不必要的。