쓰기 이진 데이터가 컴퓨터 사이가 아닌 휴대용입니다.
유일한 휴대용 정보는 텍스트입니다 (심지어 모든 시스템이 동일한 텍스트 형식을 사용하는 것은 아닙니다. (운좋게도 대부분 127 ASCII 문자를 받아 들여 곧 Unicode와 같은 것으로 표준화 할 것입니다.)
파일에 데이터를 쓰려면 파일의 정확한 형식을 결정해야하며 그런 다음 해당 형식의 데이터를 읽을 코드를 작성하고 해당 형식의 특정 하드웨어 표현으로 변환하십시오. 형식은 바이너리 일 수도 있고 직렬화 된 텍스트 형식 일 수도 있습니다 (디스크 입출력 속도가 아마도 제한 요소가 될 수 있기 때문에) 성능면에서별로 중요하지 않습니다. 간결성 측면에서 보면 이진 형식이 더 효율적 일 것입니다. 각 플랫폼에서 디코딩 기능을 작성하는 것은 분명히 텍스트 형식이 그것의 t는 이미 시내로 건축된다.
간단한 해결책 :
직렬화 된 텍스트 형식에 대한 읽기/쓰기.
정렬 문제도 없습니다.
#include <algorithm>
#include <fstream>
#include <vector>
#include <iterator>
struct Vector
{
float x, y, z;
};
std::ostream& operator<<(std::ostream& stream, Vector const& data)
{
return stream << data.x << " " << data.y << " " << data.z << " ";
}
std::istream& operator>>(std::istream& stream, Vector& data)
{
return stream >> data.x >> data.y >> data.z;
}
int main()
{
// Copy an array to a file
Vector data[] = {{1.0,2.0,3.0}, {2.0,3.0,4.0}, { 3.0,4.0,5.0}};
std::ofstream file("plop");
std::copy(data, data+3, std::ostream_iterator<Vector>(file));
// Read data from a file.
std::vector<Vector> newData; // use a vector as we don't know how big the file is.
std::ifstream input("inputFile");
std::copy(std::istream_iterator<Vector>(input),
std::istream_iterator<Vector>(),
std::back_inserter(newData)
);
}
귀하의 게시물을 읽기가 매우 어렵습니다. –
그건 당신이 지금 당장 가지고있는 C++가 아닙니다. 사용법은 컴파일되지 않으며 문제의 벡터를 어떻게 사용하는지 보여주지 않습니다. load()가 수락하고 반환하는 것을 보여주기 위해 사용법을 수정하십시오. 또한 coords는 예제에서 float 포인터이고, func는 벡터 포인터를 원합니다. –
파일에 이진 데이터를 쓰고 그 내용을 읽을 수 없습니다. 기계 사이에는 너무 많은 변형이 있습니다. 데이터를 직렬화 (텍스트로 쓰는 것)하는 것이 훨씬 쉬우 며 입력시에 직렬화하여 구조에 다시 적용하는 것이 더 쉽습니다. –