【问题标题】:Binary writing of INT16 on c++C++上INT16的二进制写入
【发布时间】:2014-03-06 16:24:38
【问题描述】:

我是这样发现的:

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

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

【问题讨论】:

    标签: c++ binary ofstream


    【解决方案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;
    

    【讨论】:

      【解决方案2】:

      但是有没有办法在不声明变量的情况下编写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
      

      【讨论】:

      • 我怎样才能用这种方式写一些数字,例如 16?
      猜你喜欢
      • 2012-12-25
      • 2017-06-05
      • 2017-01-26
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-10
      相关资源
      最近更新 更多