के बीच फ्लोट परिवर्तन की लंबाई फ़ाइल में float
मान निर्यात करते समय मुझे एक अजीब समस्या का सामना करना पड़ा। मैं उम्मीद करता हूं कि प्रत्येक फ्लोट एक ही लंबाई (जाहिर है) होने की उम्मीद करेगी, लेकिन मेरा प्रोग्राम कभी-कभी इसे 32 बिट नंबर और कभी-कभी 40 बिट नंबर के रूप में निर्यात करता है। एक एक प्रोग्राम है जो अभी भी इस व्यवहार से पता चलता की न्यूनतम काम कर उदाहरण है:32 और 40 बिट
#include <stdio.h>
const char* fileName = "C:/Users/Path/To/TestFile.txt";
float array [5];
int main(int argc, char* argv [])
{
float temp1 = 1.63006e-33f;
float temp2 = 1.55949e-32f;
array[0] = temp1;
array[1] = temp2;
array[2] = temp1;
array[3] = temp2;
array[4] = temp2;
FILE* outputFile;
if (!fopen_s(&outputFile, fileName, "w"))
{
fwrite(array, 5 * sizeof(float), 1, outputFile);
fclose(outputFile);
}
return true;
}
मैं आउटपुट फ़ाइल वास्तव में 20 (5 बार 4) बाइट्स, जिनमें से प्रत्येक चार एक नाव का प्रतिनिधित्व शामिल करने के लिए उम्मीद करेंगे। हालांकि, मैं इस मिल:
8b 6b 07 09 // this is indeed 1.63006e-33f
5b f2 a1 0d 0a // I don't know what this is but it's a byte too long
8b 6b 07 09
5b f2 a1 0d 0a
5b f2 a1 0d 0a
तो नाव temp2
चार के बजाय 5 बाइट्स लेता है, और वह फ़ाइल की कुल लंबाई 23 है यह कैसे संभव है ?! संख्या इतनी छोटी नहीं है कि वे असामान्य संख्याएं हैं, और मैं किसी भी अन्य कारण के बारे में नहीं सोच सकता कि आकार में कोई अंतर क्यों होगा।
मैं 64-बिट विंडोज 7 सिस्टम पर एमएसवीसी 2010 कंपाइलर का उपयोग कर रहा हूं।
नोट:मैं पहले से ही एक बहुत ही इसी तरह के प्रश्न पूछा यहाँ है, लेकिन जब मुझे एहसास हुआ कि समस्या अधिक सामान्य था, मैं एक और अधिक संक्षिप्त तरीके से इसे repost का फैसला किया। QDataStream uses sometimes 32 bit and sometimes 40 bit floats
असल में, 'बी' के बिना 'fopen' वाली किसी भी फ़ाइल को कभी भी नहीं खोलें। – zneak
बस खुश रहें कि आपके परीक्षण मूल्यों में से एक '0.5392157' नहीं था! –
[बाइनरी और टेक्स्ट मोड] (http://stackoverflow.com/questions/229924/difference-between-files-writen-in-binary-and-text-mode#) –