1
我有一个存储在二进制文件中的浮点数的二维数组。我读出来使用:从二进制读取2D浮点数组,从char *转换为float [2]
#include <fstream>
#include <algorithm>
....
ifstream infile(fileName.c_str(), ios::in | ios:binary);
const int numCols = 2;
char rows[1 * sizeof(int)];
infile.read(rows, sizeof(int));
int numRows = * reinterpret_cast<int *>(rows);
char * temp;
temp = new char[numRows * numCols * sizeof(float)];
infile.read(temp, sizeof(float) * numRows * numCols);
我然后创建的浮动阵列和用于memcpy
超过复制的信息。
float binData[numRows][numCols];
memcpy(binData, temp, sizeof(float) * numRows * numCols);
这种方法适用(binData包含了我想要的),但我被告知不要使用memcpy
。所以我改变为使用该:
float * ftemp = reinterpret_cast<float *>(temp);
int loc;
for (int i = 0; i < numRows; ++i){
for(int j = 0; j < numCols; ++j){
loc = i * numCols + j;
binData[i][j] = ftemp[loc];
}
}
我尝试使用copy
与ftemp
和binData
但我得到这个错误:
incompatible types in assignment of 'float' to 'float [2]'
这似乎过于复杂,使用的是双回路。由于信息在char
阵列中以正确的顺序存储,应该有一种方法可以将其读取为float [numRows][numCols]
或者将temp
中保存的内存复制到binData
,但我无法弄清楚。有没有办法将char []
直接转换为float [][]
或者是否有替代char
的设置,可以让我直接复制?
'炭临时数组[* numRows行数numCols *的sizeof(浮动)];'这是不合法的C++。 – PaulMcKenzie
有几个指针和数组以及在那里并不是真正需要的数组和变体,以及您在[variable-length arrays]中使用非标准功能(https://en.wikipedia.org/wiki/Variable-length_array )。呵呵,还有一些破坏[string aliasing rule](http://stackoverflow.com/questions/98650/what-is-the-strict-aliasing-rule)。 –
除非此代码对速度要求严格(从很少的文件中读取数据),否则我建议您使用[标准容器](http://en.cppreference),使用简单*路径,并使用C++功能。 com/w/cpp/container),[标准算法](http://en.cppreference.com/w/cpp/algorithm),[标准I/O功能](http://en.cppreference.com/w/cpp/io)和[标准迭代器助手](http://en.cppreference.com/w/cpp/iterator)。 –