【发布时间】:2014-03-06 16:24:38
【问题描述】:
我是这样发现的:
ofstream out("test", ios::out | ios::binary);
UINT16 myint16=16;
out.write((char*)&myint16, sizeof(myint16));
但是有没有办法在不声明变量的情况下编写 INT16 二进制文件?
【问题讨论】:
我是这样发现的:
ofstream out("test", ios::out | ios::binary);
UINT16 myint16=16;
out.write((char*)&myint16, sizeof(myint16));
但是有没有办法在不声明变量的情况下编写 INT16 二进制文件?
【问题讨论】:
你可以这样写自己的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;
【讨论】:
但是有没有办法在不声明变量的情况下编写
INT16二进制文件?
是的,您可以使用 c 字符串文字:
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
【讨论】: