Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.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++_Stl - Fatal编程技术网

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()
可以这样使用。非常感谢。