तो मैं फ़ाइल में लिखने के लिए इस कोड का उपयोग कर रहा है (बस अब परीक्षण, मैं बाद में एक स्तर संपादक लिखने के लिए जा रहा हूँ): एक स्ट्रिंग लेखन
int main()
{
ofstream file("level.bin", ios::binary);
int ents = 1; //number of entites
file.write((char*)&ents, sizeof(int));
float x = 300; //x and y coords
float y = 500;
file.write((char*)&x, sizeof(float));
file.write((char*)&y, sizeof(float));
int imglength = 12; //strings are prefixed by a length
file.write((char*)&imglength, sizeof(int));
string img = "platform.png"; //string
file.write(img.c_str(), sizeof(img.c_str()));
cout << "wrote\n";
return 0;
}
कोड मैं मीटर लोड करने के लिए इसका उपयोग यह है:
void SceneManager::LoadScene(std::string filename) { std::ifstream file(filename.c_str(), std::ios::binary); int ents; file.read((char*)&ents, sizeof(int)); std::cout << ents << std::endl; for(int i = 0; i < ents; i++) { //read x and y coords float x; float y; file.read((char*)&x, sizeof(float)); file.read((char*)&y, sizeof(float)); std::cout << x << " " << y << std::endl; int imglength; file.read((char*)&imglength, sizeof(int)); std::cout << imglength << std::endl; std::stringstream ss; for(int k = 0; k <= imglength; k++) { //read string char c; file.read((char*)&c, sizeof(char)); ss << c; } std::string image = ss.str(); std::cout << image << std::endl; phys_static ent; Def edef; edef.SetVal("x", x); edef.SetVal("y", y); edef.SetString("image", image); ent.init(edef); AddEntity(ent); } file.close(); }
सब कुछ स्ट्रिंग लोडिंग को छोड़कर ठीक काम करता है। मुझे उम्मीद है कि मैं इसे गलत लिख रहा हूं, प्लेटफार्म के बजाए यह छवि को लोड करते समय प्लैटेटेट और त्रुटियों को दिखाता है। मैं स्ट्रिंग को इसकी लंबाई के साथ भी उपसर्ग कर रहा हूं। बाइनरी फ़ाइल में स्ट्रिंग लिखने का सही तरीका क्या है? क्या corre
यह काम करता है, सिवाय इसके कि कुछ अजीब कारणों से स्ट्रिंग के अंत में एक अतिरिक्त जी जोड़ा गया है। मैं आकार को 11 तक कम करने की कोशिश करूंगा और देख सकता हूं कि यह कुछ भी करता है या नहीं। – Chris
नल वर्ण ओपी के कोड (आपके सुधार के साथ) के लिए कोई समस्या नहीं होनी चाहिए। यह कभी नहीं मानता कि '\ 0' 'स्ट्रिंग टर्मिनेटर के रूप में कार्य करता है और यह कभी भी सी स्टाइल स्ट्रिंग का उपयोग नहीं करता है। –
ठीक है, लंबाई को 11 तक सेट किया गया। – Chris