如何将带有 null 字符的字节数组馈送到 std::iostream 中?

How do I feed a byte array with null characters into a std::iostream?

提问人:Neppomuk 提问时间:6/9/2020 更新时间:6/9/2020 访问量:533

问:

我必须将一个包含 null 字符的字节数组馈入 的导数中。原始数据如下所示:std::iostream

FF 73 00 05 73

我将这个数据块存储到一个 char 数组中:

char *tmc_command = new char [5];  // array size may vary
SerialStream tmc_receiver_handler; // a derivative of std::iostream

tmc_command [1] = 0xFF;
tmc_command [1] = 0x73;
tmc_command [2] = 0x00; // NULL character, eeeeeehhhh!!! :-(
tmc_command [3] = 0x05;
tmc_command [4] = 0x73;

instance -> tmc_receiver_handler << tmc_command;

不幸的是,执行此操作时,由于 null 字符,输出将停止在位置 2。

由于这只是一个字节数组而不是一个真正的字符串,我怎样才能让流对象简单地吐出完整的内容而不停在空字符处?或者我应该使用不同的对象而不是?谢谢。tmc_commandchar []

C++ 数组 iostream 空字符

答:

1赞 Stephen M. Webb 6/9/2020 #1

ostream 插入器运算符用于格式化。如果不想将数据打印为格式化字符串,则格式化的插入运算符不是您想要的。

请尝试改用 ostream write() 成员函数。

评论

0赞 Neppomuk 6/9/2020
是否有像这样的操纵器,可以关闭空格的抑制?noskipws
0赞 Stephen M. Webb 6/9/2020
空字节不是空格,而是字符串终止符。如果要输出无格式化的数据,则必须使用无格式化输出。
1赞 user13708060 6/9/2020 #2

我会检查写入函数 - 参考这里 http://www.cplusplus.com/reference/ostream/ostream/write/

评论

0赞 Neppomuk 6/9/2020
我刚刚尝试过.它可能不如插入运算符优雅,但至少,这些东西现在可以工作了。谢谢!write ()