[英]Boost Binary Endian parser not working?
我正在研究如何使用增强精神Qi二进制字节序解析器。 我根据此处和基础示例编写了一个小的测试解析器程序,但是它不能正常工作。 它给了我味精:“错误:不匹配”。
这是我的代码。
#include "boost/spirit/include/qi.hpp"
#include "boost/spirit/include/phoenix_core.hpp"
#include "boost/spirit/include/phoenix_operator.hpp"
#include "boost/spirit/include/qi_binary.hpp" // parsing binary data in various endianness
template "<"typename P, typename T>
void binary_parser( char const* input, P const& endian_word_type,
T& voxel, bool full_match = true)
{
using boost::spirit::qi::parse;
char const* f(input);
char const* l(f + strlen(f));
bool result1 = parse(f,l,endian_word_type,voxel);
bool result2 =((!full_match) || (f ==l));
if ( result1 && result2) {
//doing nothing, parsing data is pass to voxel alreay
} else {
std::cerr << "Error: not match!!" << std::endl;
exit(1);
}
}
typedef boost::uint16_t bs_int16;
typedef boost::uint32_t bs_int32;
int main ( int argc, char *argv[] ){
namespace qi = boost::spirit::qi;
namespace ascii = boost::spirit::ascii;
using qi::big_word;
using qi::big_dword;
boost::uint32_t ui;
float uf;
binary_parser("\x01\x02\x03\x04",big_word,ui); assert(ui=0x01020304);
binary_parser("\x01\x02\x03\x04",big_word,uf); assert(uf=0x01020304);
return 0;
}
我几乎复制了示例,但是为什么这个二进制解析器不起作用。 我使用Mac OS 10.5.8和gcc 4.01编译器。
big_word
解析器匹配一个big-endian字(16位),而big_dword
则匹配您想要的内容(big-endian dword,32位)。 但是我认为使用浮点数作为二进制解析器的属性不是一个好主意,您可能无法获得期望的结果。
我使用了错误的解析参数。 我不应该使用big_word
而不是big_dword
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.