C++ 将存储在向量中的二进制数据读入结构
考虑以下代码:C++ 将存储在向量中的二进制数据读入结构,c++,stl,C++,Stl,考虑以下代码: #pragma pack(2) struct file_data { uint8_t data0; uint16_t data1; uint8_t data2; } #pragma pack() file_data readFile(const std::string& pathFile) { file_data result; std::ifstream(pathFile, std::ios::in | std::ios::binary);
#pragma pack(2)
struct file_data {
uint8_t data0;
uint16_t data1;
uint8_t data2;
}
#pragma pack()
file_data readFile(const std::string& pathFile) {
file_data result;
std::ifstream(pathFile, std::ios::in | std::ios::binary);
if(!file.is_open()) return file_data();
file.read(reinterpret_cast<char*>(result), sizeof(file_data));
file.close();
return result;
}
int main(int argc, char* argv[]) {
file_data = readFile("the/path/to/the/file");
return 0;
}
因此,首先将向量写回流,然后读入结构
我觉得这是非常低效的,我在这里缺少一些知识。有人能为我的
readData()
方法提供更好的解决方案吗?旁白:int8\t
可能不是char
,你应该使用它
file_data readData(const std::vector<char>& bytes) {
file_data result;
std::copy_n(bytes.data(), sizeof(file_data), reinterpret_cast<char*>(&result));
return result;
}
文件\u数据读取数据(const std::vector&bytes){
文件和数据结果;
std::copy_n(bytes.data()、sizeof(file_data)、reinterpret_cast(&result));
返回结果;
}
这同样适用于
std::string
和std::array
(对于N>=sizeof(file\u data)
)除此之外:int8\u t
可能不是char
,您应该使用它
file_data readData(const std::vector<char>& bytes) {
file_data result;
std::copy_n(bytes.data(), sizeof(file_data), reinterpret_cast<char*>(&result));
return result;
}
文件\u数据读取数据(const std::vector&bytes){
文件和数据结果;
std::copy_n(bytes.data()、sizeof(file_data)、reinterpret_cast(&result));
返回结果;
}
这同样适用于
std::string
和std::array
(对于N>=sizeof(文件数据)
)您正在查找的memcpy()
@Evg Yes。我没有c+p这段代码,这是一个输入错误。您正在寻找memcpy()
@Evg Yes。我没有c+p这个代码,这是一个输入错误。我不知道std::copy\n()
可以这样使用。谢谢。我不知道std::copy\n()
可以这样使用。非常感谢。