Так что я новый для C. Мне нужно написать программу, которая принимает двоичный файл целых чисел в качестве входных данных, выделяет достаточно большой массив с malloc, затем использует функцию read() c для хранения каждого целого в двоичном файле в соответствующем месте в массиве. Моя проблема в том, что я не знаю, как различать эти два. когда я распечатываю данные, хранящиеся в этом распределенном пространстве массивов, он просто показывает значение Ascii двоичных данных, взятых в виде строки символов. , так, например, если у меня есть двоичный номер 0000 0001, массив из местоположений [0] - [7] будет каждое значение ascii каждого бита в этом двоичном числе.C двоичные файлы и файлы ascii
В основном, я пытаюсь прочитать каждую строку и сохранить это строковое int представление двоичной информации в 1 месте массива, так что, как и в предыдущем примере, желаемый результат: [0] - 1. Есть ли какой-то алгоритм преобразования I нужно сделать? Я считаю, что для того, чтобы c просто узнать, что его двоичная информация, а не ascii, потому что существует два разных типа файлов: двоичный и ASCII. Любая помощь будет принята с благодарностью, спасибо заранее!
Ps я могу использовать только эти вызовы функций: открытие, закрытие, чтение, таНос, 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);
}
}
Вы говорите, что у вас есть двоичный файл, но затем говорите о чтении строк из файла. «lines» - это текстовая концепция, а двоичные файлы не имеют строк, а всего двоичных данных. Вы используете функции POSIX (open/read), которые не различают текстовые и двоичные файлы, а всего лишь последовательность байтов, и вам решать эти байты как бинарные или ASCII-тексты или UTF-8 текст или что-то еще. –
хорошо, это очень помогает. Я просто смущен, как иначе я должен пройти через массив, на который указывает моя переменная filePointer, чтобы получить соответствующую информацию. Я распечатываю его, и данные в каждом месте по-прежнему являются только значениями ascii для каждого бита, когда я хочу, чтобы это целочисленное представление. В этом случае обращайтесь к каждому местоположению целиком, чтобы вычислить среднее значение. это то, что filePointer является указателем на тип char? – RunFranks525
Вы делаете много лишних отступов, что делает код менее читаемым. Обратите внимание, что во всех ваших операторах if, если условие истинно, есть возврат или выход, поэтому else {не нужно. –