Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在内存块上读取数据集文件(十六进制值)_C++_Dataset_Ifstream - Fatal编程技术网

C++ 在内存块上读取数据集文件(十六进制值)

C++ 在内存块上读取数据集文件(十六进制值),c++,dataset,ifstream,C++,Dataset,Ifstream,我有一段代码试图将数据集中的数据读取到随机分配的内存块中。我不知道数据集中到底是什么,但它们访问矩阵值(十六进制值)并将其放到内存位置。而且效果很好 for (unsigned int i=0; i<header->numImg; ++i) { const unsigned int cur_proj = i; // absolute projection number // read mx double* const pMat

我有一段代码试图将数据集中的数据读取到随机分配的内存块中。我不知道数据集中到底是什么,但它们访问矩阵值(十六进制值)并将其放到内存位置。而且效果很好

for (unsigned int i=0; i<header->numImg; ++i)
    {
        const unsigned int cur_proj = i; // absolute projection number

        // read mx
        double* const pMatx = MatrixBuffers + cur_proj * 12;
        ifData.read((char*) (pMatx), 12 * sizeof(double));
        }
for(无符号整数i=0;inumImg;++i)
{
const unsigned int cur_proj=i;//绝对投影数
//读取mx
双*常数pMatx=矩阵缓冲+当前项目*12;
ifData.read((char*)(pMatx),12*sizeof(double));
}
MatrixBuffers在哪里

double** MatrixBuffers = new double* [header.numImg];   
MatrixBuffers[0] = new double[header.numImg * 12];  
for (unsigned int i=1; i<header.glb_numImg; ++i) {
    MatrixBuffers[i] = MatrixBuffers[0] + i * 12;
}
double**MatrixBuffers=newdouble*[header.numg];
MatrixBuffers[0]=新的双精度[header.numg*12];

对于(unsigned int i=1;iifData.read是一个顺序读取操作,因此每次读取都会将接下来的12个双精度值输入到一个分配的双精度数组中。我不确定我是否理解您的问题。好的,为了澄清这一点,在此之前有一个读取操作,从数据集中的第一个值开始,直到第12个字节,然后是一个。i想知道,这个访问模式是从数据集中的哪个位置开始的。如果它是从第13个字节开始的,编译器如何从中知道:ifData.read((char*)(pMatx),12*sizeof(double))假设这是ifData声明中的类型,位置由ifstream维护。问题是,这段代码读取12倍,然后寻找4MB以外的位置并执行相同的操作。seekg应该在for循环中。我的第三次读取操作读取介于两者之间的数据。那么,你是说我的第三次读取操作吗d操作将自动知道在12倍后开始读取?中间“是什么意思?文件位置?您如何知道它是从中间读取的。-一个seekg会更改下一次读取的位置,否则一次读取会接着另一次。-如果您不显示实际代码,您将无法获得好的答案。