如何将二进制十六进制文字输入 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 };
我有一个方法 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 };