2011-02-26 64 views
2

我有unsigned short int(從0到65535),我必須將它保存到文件,使用stdio並消耗2個字節,但我不知道如何。短整型 - 如何保存到文件

有什麼建議嗎?

回答

1

http://www.cplusplus.com/doc/tutorial/files/這是很好的閱讀整個事情,但你需要的信息是在文章的下半部分的「二進制文件」。

ofstream outputFile; 
outputFile.open("yourfile.dat"); 
unsigned short int i; 
i = 10; 
outputFile.write(&i, sizeof(i)); 

outputFile.close(); 
+0

它不起作用。 '/mnt/Dane/Projects/Discoverer/Discoverer/src/MapClass/SaveMap.cpp|92|error:沒有匹配函數調用'std :: basic_fstream > :: write(short unsigned int(int),int)'|' – m4tx 2011-02-26 15:49:42

+3

而不是'outputFile.write(&i, 2);'try'outputFile.write(reinterpret_cast (&i),sizeof(i));' – 2011-02-26 16:37:29

+1

'sizeof(i)'或'sizeof(unsigned short )''會對硬編碼的'2'更好。 – 2011-02-26 16:46:55

2

我將使用一個工會(是的,我不喜歡使用投..):

template <typename T> 
union Chunk { 
    T _val; 
    char _data[sizeof(T)]; 
}; 

int main(void) { 
    std::ofstream output; 
    Chunk<short> num; 
    num._val = 42; 
    output.open("filepath.txt"); 
    if (output.good()) { 
     output.write(num._data, sizeof(num)); 
    } 
    output.close(); 
    return 0; 
} 
+0

你不應該用前面的下劃線來命名你的成員。前面下劃線的名字是爲編譯器保留的。請參閱http://stackoverflow.com/questions/228783/what - 關於使用下劃線在ac標識符。 – 2011-02-26 16:52:53

+1

@Emile:這些不是。成員名稱不是「在全局名稱空間」。 – 2011-02-26 16:59:56

+0

我糾正。:-) – 2011-02-26 19:04:49

1

如果你必須使用stdio.h中(而不是的iostream):

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    FILE* f; 
    unsigned short int i = 5; 
    f=fopen("yourfile","w"); 
    if(f == NULL) 
    { 
     perror("yourfile is not open"); 
     exit(EXIT_FAILURE); 
    } 
    fwrite(&i,sizeof(i),1,f); 
    fclose(f); 
    return 0; 
}