C++ 从十六进制数组读取双精度向量
我使用fread从文件中读取数据,使用下面的代码C++ 从十六进制数组读取双精度向量,c++,C++,我使用fread从文件中读取数据,使用下面的代码 vector<double> table; table.resize(10); fread(&table[0],table.size()*sizeof(double), 1, fp); 向量表; 表1.1(10); fread(&table[0],table.size()*sizeof(double),1,fp); 但现在我有一个十六进制值数组中的数据 像 const unsigned char data[]={0x50,
vector<double> table;
table.resize(10);
fread(&table[0],table.size()*sizeof(double), 1, fp);
向量表;
表1.1(10);
fread(&table[0],table.size()*sizeof(double),1,fp);
但现在我有一个十六进制值数组中的数据
像
const unsigned char data[]={0x50,0x11,0x12,…}代码>
我知道从哪里读取数据的索引
说int Index=100代码>
那么如何从输入数组中读取double类型的数据并填充向量呢?最简单的方法可能是使用旧的C mem*函数:
memcpy(&table[0], &data[Index], table.size() * sizeof(double));
您可以在数据周围使用内存流,因此反序列化的相同代码可以在打开的文件、内存或任何流上工作。这与从文件中获得的非常相似,只是重新解释转换(&data[100])代码>。源和目标类型不一定要匹配吗?我认为OP本质上是询问类型双关语。编辑:哦,重新解释演员阵容的事情。当编译器决定它喜欢SSE时,这会给对齐带来麻烦。好吧,您可以使用强制转换。这将使实际操作更加清晰。是的,投射源指针并使用copy,是最清晰的,可以防止需要sizeof。嘎,忍者编辑出错了。我估计会有麻烦。请参见编辑上一条评论。