我的数组定义如下
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文件所使用的代码段。这是正确的方法吗?
答案 0 :(得分:1)
否,如果您不打算考虑Endianness,则打算将文件传输到另一台机器并读取它不是正确的方法。假设文件为:
在以上所有情况下均无效。
答案 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()
将每个元素写入文件。