Как читать/записывать в двоичный файл в форме 2D-массива?

Я пытаюсь использовать двоичный файл для хранения своих данных. Но я не понимаю, как мне читать/писать в форме 2D-массива. Я знаю, как читать массивы/структуры и т. д. из двоичных файлов, я просто не знаю, как это сделать с 2D-массивом.

Я просмотрел подобные вопросы, но я не понял, к чему приходит большинство людей. Я просто хочу знать, как читать/записывать данные в формате 2D-массива. как в fwrite(x, y, z, w); .

Вот как выглядит мой массив:

int array[50][100];

Я не знаю, что делать с этого момента, если бы это было одномерным, я бы сделал;

FILE* fp;
fp = fopen("file.bin","wb+");
fwrite(array, sizeof(int), 50, fp);

но поскольку этот массив многомерный, я на самом деле не знаю, что вставить в эту функцию.

Заранее спасибо.

Обратите внимание, что я новичок в кодировании и, возможно, не вижу довольно простого решения.

Если вы читаете/записываете каждый элемент по одному, вам просто нужно обязательно читать и писать по одному и тому же шаблону.

Scott Hunter 30.05.2019 21:16

Да, а нельзя ли целиком прочитать? Я имею в виду, что вы можете читать массивы целиком, верно?

Anthony Ege KOPRİ 30.05.2019 21:17

Если вы можете быть уверены, что он будет читать и писать по одному и тому же шаблону, конечно.

Scott Hunter 30.05.2019 21:25

Да, но как? сделать ``` fwrite(array,sizeof(int),50*100,fp); ```

Anthony Ege KOPRİ 30.05.2019 21:58

Что произошло, когда вы попробовали это?

Mark Benningfield 30.05.2019 23:35

При записи информации в двоичной форме вам нужна некоторая схема, чтобы указать, сколько данных записывается и в какой форме они включаются в то, что записывается в файл. Если в файл необходимо записать более одного массива, то примером может быть Приставка ваших данных с 9-байтами, представляющими char int int, где вы храните размер типа (например, char будет содержать 4 для sizeof(int),), а затем следующие два int будет содержать rows и cols для размеров массива (для одномерного массива rows=1). Затем вы можете просто прочитать 9 байтов и узнать, что будет дальше.

David C. Rankin 31.05.2019 05:51
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
386
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Метод сохранения двумерного массива будет очень похож на сохранение одномерного массива, это действительно так, как вы написали в комментарии к вопросу:

fwrite(array, sizeof(int), 50*100, fp);

Это связано с тем, что двумерный (в данном случае int) массив хранится так же, как и одномерный массив; неразрывная цепочка ints. Тем не менее, вы можете сохранить его любым способом, если вы придерживаетесь режима сохранения/загрузки. fwrite принимает указатель в качестве аргумента, поэтому, пока данные, которые вы ему передаете, представляют собой массив, он будет работать.

@MarkBenningfield К сожалению, я написал, что fwrite принимает массив в качестве аргумента, когда он имеет тип void *. Я смешал свое объяснение с терминологией, отредактировав сообщение соответствующим образом.

John9912 31.05.2019 01:15

Вы мне очень помогли! Спасибо :)

Anthony Ege KOPRİ 31.05.2019 12:02

Другие вопросы по теме