将INT32数组转储到.bin文件中

时间:2019-01-01 08:42:20

标签: c

我的数组定义如下

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 :(得分:1)

否,如果您不打算考虑Endianness,则打算将文件传输到另一台机器并读取它不是正确的方法。假设文件为:

  1. 用小字节序的机器写,但用大字节序的机器读
  2. 用大端机写,但用小端机读

在以上所有情况下均无效。

答案 1 :(得分:0)

在askinoor发出的字节顺序中,这种方式不是通用的,因为读者现在必须在读取时是INT32[6][12]

为什么程序中无用的变量var_row_index等?

答案 2 :(得分:0)

如前所述,在将数据串行进出CPU时,最好强制网络字节顺序。可以使用htonl()之类的函数轻松完成此操作,该函数应该在大多数平台上都可用(在大型字节序计算机上编译为零)。

这是来自Linux的文档: https://linux.die.net/man/3/htonl

此外,将大小和类型明确地编码到程序中也不是一个好习惯。 使用sizeof(array[0][0])获取array元素类型的大小,然后对其进行迭代,然后使用htonl()将每个元素写入文件。