不确定我是否只是错误使用它,因为这不是我的专业领域,但我的印象是这应该给我一个完整的解码openframeworks缓冲区(或一个简单的字符串,我尝试了各种方式所有导致同样太短的字符串):
string str; // string is a line from a file handle and shows to be ok in the debugger
istringstream istr(str);
Poco::Base64Decoder b64in(istr);
ofBuffer buffer;
b64in >> buffer;
现在我正在解码的一个示例base64字符串是这一行:
I2J1bmRsZQAAAAAAAAAAAQAAABwvT1NDL1NwYWNlSW50ZW5zaXR5ACxmAAA6nUlSAAAAFC9PU0MvU3BlZWQAACxmAAA90/fPAAAAGC9PU0MvU21vb3RobmVzcwAsZgAAP2Wu5gAAABQvT1NDL1JlYWNoAAAsZgAAPnxQSAAAABgvT1NDL0RlbnNpdHkAAAAALGYAAAAAAAAAAAAYL09TQy9Db2hlcmVuY2UAACxmAAA+tYEGAAAAIC9PU0MvVHJhdmVsSW50ZW5zaXR5AAAAACxmAAA8eQlsAAAAFC9PU0MvUmh5dGhtACxmAAA+6LQ5AAAAGC9PU0MvSGFybW9ueQAAAAAsZgAAPui0OQAAABQvT1NDL0VuZXJneQAsZgAAPYznBA==
该行没有解析为简单的ascii文本,而是由某些vvvv补丁在base64中转储的原始osc数据包我无法访问...所以我猜它也可能是编码问题?
并且我输入的所有内容,无论我使用的是流式传输器还是像上面这样的运算符,都只是“#bundle”。这可能与“#bundle”之后的/字符或其他非标准内容有关吗?我的印象是Base64Decoder不关心空格或它在解码数据中找到的任何内容。
答案 0 :(得分:4)
所以我最终没有使用运算符,而是将base64decoder的输出复制到流中,然后从中获取字符串:
istringstream istr(str);
ostringstream ostr;
Poco::Base64Decoder b64in(istr);
copy(std::istreambuf_iterator<char>(b64in),
std::istreambuf_iterator<char>(),
std::ostreambuf_iterator<char>(ostr));
cout << ostr.str(); // returns full decoded output
答案 1 :(得分:1)
这实际上与Poco :: Base64Decoder无关。 std :: string的流提取运算符将停留在它在输入流中遇到的第一个空白字符(在Base64Decoder的情况下,它将是解码数据)。