寫入二進制數據是機器之間的非便攜。
關於唯一的便攜式的東西是文本(即使不能依靠,因爲並非所有的系統都使用相同的文本格式(幸運的是大多數接受127個ASCII字符,希望很快我們會標準化爲像Unicode這樣的東西(他笑着說) )
如果要將數據寫入文件,您必須確定文件的確切格式,然後編寫代碼讀取該格式的數據,並將其轉換爲您的特定硬件的表示形式。格式可以是二進制的,也可以是序列化的文本格式,它在性能上並不重要(因爲磁盤IO速度可能會成爲你的限制因素)在緊湊性方面,二進制格式可能會更加高效。在每個平臺上編寫解碼函數的文本格式肯定比較容易它已經建成了河流。
如此簡單的解決方案:
讀取/寫入序列化的文本格式。
也沒有對齊的問題。
#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)
);
}
您的帖子非常難以閱讀。 – 2010-07-07 16:54:18
這不是C++現在的方式。您的使用情況不會編譯,也不會說明您希望如何使用該矢量。請修改用法以顯示什麼load()正在接受和返回。另外,coords是你的例子中的一個浮點指針(有點),func需要一個矢量指針。 – 2010-07-07 17:02:37
將二進制數據寫入文件並讀取該文件是不可移植的。機器之間的差異太多了。序列化數據(將其寫爲文本)然後將輸入序列化回結構要容易得多。 – 2010-07-07 17:39:56