如何将二进制十六进制文字输入 std::istream?

How to feed binary hex literal into std::istream?

我有一个方法 deserialize 引用打开的 std::istream ,通常我传入 std::ifstream 使用 std::ios::binary 选项打开。

现在我想用一些二进制(十六进制)文字来测试它,但我不知道如何将该数据输入 std::istream

我试过类似的东西 answer

struct membuf : std::streambuf
{
  membuf(char* begin, char* end)
  {
    this->setg(begin, begin, end);
  }
};

int main()
{
  char buffer[] = "0a0b0c0d000000480000000000420410000";

  membuf sbuf(buffer, buffer + sizeof(buffer) - 1);
  std::istream in(&sbuf);

  deserialize(in);
}

失败,因为该数据不是 read/fed 二进制。

我该怎么做?

您的 buffer 中没有任何二进制数据,只有字符。你有一个普通的 c-style 字符文字。

要从二进制数据中获取输入,您需要这样的声明:

unsigned char buffer[] = { 0x0a, 0x0b, 0x0c, 0x0d, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 
                            0x00, 0x00, 0x00, 0x42, 0x04, 0x10, 0x00, 0x00 };