Выгрузка массива INT32 в файл .bin - PullRequest
0 голосов
/ 01 января 2019

У меня есть массив, определенный ниже

INT32 LUT_OffsetValues[6][12] = {
0,180,360,540,720,900,1080,1260,1440,1620,1800,1980,
2160,2340,2520,2700,2880,3060,3240,3420,3600,3780,3960,4140,
4320,4500,4680,4860,5040,5220,5400,5580,5760,5940,6120,6300,
6480,6660,6840,7020,7200,7380,7560,7740,7920,8100,8280,8460,
8640,8820,9000,9180,9360,9540,9720,9900,10080,10260,10440,10620,
10800,10980,11160,11340,11520,11700,11880,12060,12240,12420,12600,12780
};

int main(int argc,char *argv[])
{
 int var_row_index = 4 ;
int var_column_index = 5 ;
int computed_val = 0 ;
FILE *fp = NULL ;

fp = fopen("./LUT_Offset.bin","wb");
if(NULL != fp)
{
    fwrite(LUT_OffsetValues,sizeof(INT32),72,fp);
    fclose(fp);
}

printf("Size of Array:%d\n",sizeof(LUT_OffsetValues));
//computed_val  =  LUT_OffsetValues[var_row_index][var_column_index];
return 0;
}

Выше приведен фрагмент кода, с помощью которого я сгенерировал файл .bin.Это правильный способ сделать это?

Ответы [ 3 ]

0 голосов
/ 01 января 2019

Из порядка байтов, сигнализируемых askinoor, этот путь не является универсальным, потому что читатель должен теперь INT32[6][12], когда он читает его

Почему бесполезные переменные var_row_index и т. Д. Вваша программа?

0 голосов
/ 03 января 2019

Как уже упоминалось, при сериализации данных в и из ЦП предпочтительно устанавливать сетевой порядок байтов.Это легко сделать с помощью таких функций, как htonl(), которые должны быть доступны на большинстве платформ (и компилироваться до нуля на машинах с прямым порядком байтов).

Вот документация из Linux: https://linux.die.net/man/3/htonl

Кроме того, не рекомендуется явно кодировать размеры и типы в вашей программе.Используйте sizeof(array[0][0]), чтобы получить размер типа элемента array, затем выполните итерации по нему и используйте htonl(), чтобы записать каждый элемент в файл.

0 голосов
/ 01 января 2019

Нет, это неправильный способ, если вы планируете перенести файл на другой компьютер и прочитать его, поскольку вы не учли Endianness .Допустим, файл имеет вид:

  1. Написано на машине с прямым порядком байтов, но прочитано на машине с прямым порядком байтов
  2. Написано на машине с прямым порядком байтов, но прочитано на машине с прямым порядком байтов

Это не сработает ни в одном из указанных выше случаев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...