长度指示器与二进制模式在c++中

length indicator with binary mode in C++

本文关键字:c++ 模式 二进制 指示器      更新时间:2023-10-16

使用c++,我以二进制模式写入我的文件,使用长度指示符方法如下:

    ostringstream ID;
    ID << b.getID(); //where b.getID() returns unsigned long
    string IDStr = ID.str();

    size_t IDlength = IDStr.length();
    stream.write ((char *)(&IDlength), sizeof(size_t));
    stream.write ((char *)(&IDStr),IDlength);

我是这样读的:

    string IDStr,ID;        
    stream.read ((char *) (&IDStr), sizeof(size_t));
    int Result;
    stringstream convert(IDStr); 
    if ( !(convert >> Result) )//give the value to Result using the chars in string
    Result = 0;//if that fails set Result to 0
    stream.read ((char *)ID,Result);

对吗?我怎么才能正确地读取它,我似乎不能正确读取代码,请帮忙?

写字符串…

size_t IDlength = IDStr.length();
stream.write ((char const*)(&IDlength), sizeof(size_t));
stream.write (IDStr.c_str() ,IDlength);

读取字符串…

size_t IDlength;
stream.read ((char *)(&IDlength), sizeof(size_t));
// Allocate memory to read the string.
char* s = new char[IDlength+1];
// Read the string.
stream.read (s, IDlength);
// Make sure to null-terminate the C string.
s[IDlength] = '';
// Create the std::string using the C string.
// Make sure the terminating null character is
// not left out.
IDStr.assign(s, IDlength+1);
// Deallocate memory allocated to read the C string.
delete [] s;