在c ++上二进制写INT16

时间:2014-03-06 16:24:38

标签: c++ binary ofstream

我发现了这种方式:

ofstream out("test", ios::out | ios::binary);
UINT16 myint16=16;
out.write((char*)&myint16, sizeof(myint16));

但有没有办法在不声明变量的情况下编写INT16二进制文件?

2 个答案:

答案 0 :(得分:1)

  

但有没有办法在不声明变量的情况下编写INT16二进制文件?

是的,您可以使用c-string文字:

out.write("\0\0", 2);

要以这种方式输出正确的INT16值,您需要知道正在编译和运行程序的机器的字节顺序。例如。输出十进制16

out.write("\x01\x00", 2); // 16 in big endian format

out.write("\x00\x01", 2); // 16 in little endian format

答案 1 :(得分:1)

您可以自己编写operator<<

std::ofstream& operator<<(std::ofstream& ofs, UINT16 d) {
  ofs.write((char*)&d, sizeof(UINT16));
  return ofs;
}

int main(int, char*[])
{
 ofstream out("test", ios::out | ios::binary);
 out << static_cast<UINT16>(16); // no variable declared
}

同样使用C ++ 11,您可以使用用户定义的文字来缩短它:

inline UINT16 operator "" _u(unsigned long long value)
{
    return static_cast<UINT16>(value);
}

然后:

out << 16_u;