Stringstream变量不以二进制代码显示?

时间:2011-11-29 23:18:50

标签: c++ stringstream

为什么stringstream查询变量不起作用?

std::stringstream query (stringstream::in | stringstream::out | stringstream::binary);


for(vector<uchar>::iterator it=buff.begin();it !=buff.end();it++)
{
    query<<*it;                    
}

cout<<query.str().length();      
printf("output:%s",query);

[编辑]

Mat data=image;//image is ROI (50X50) from IplImage* getting Matrix data. 
std::vector<uchar> buff; 
std::vector<int> p; 
p.push_back(CV_IMWRITE_PNG_COMPRESSION); 
p.push_back(9); 
cv::imencode(".png", data, buff);//for ROI image data to "png" vector buff.  
std::vector<char> query(buff.size()*2+1); //MooingDuck's codes... 
int len = mysql_real_escape_string(handle, &query[0], (const char*)&buff[0], query.size()); 
query.resize(len);

我收到错误:

  

0040CF5F jmp _escape_string_for_mysql + 0F2h(40CFA2h)0040CF61 mov   al,byte ptr [edi]&lt; ---------------------------------------错误点   0040CF63 movsx ecx,al 0040CF66 cmp ecx,5Ch 0040CF69 ja   _escape_string_for_mysql + 0E5h(40CF95h)

2 个答案:

答案 0 :(得分:2)

因为您使用printf错误。最好不要使用printf

std::cout << query.str();

此外,在此处指定binary几乎没用,in / out是多余的(stringstream默认为/ out)。

答案 1 :(得分:1)

stringstream::binary没有按照您的想法行事。

stringstream::binary使得流不会将系统换行符转换为C ++换行符。 stringstream::text使流将系统换行符转换为C ++换行符 它们都不会将流读或写为“二进制代码”。

C ++换行符是\n,而Windows系统换行符是\r\n(两个字符!),而linux只使用\n。我听说Mac系统换行符是\n\r但我无法确认。

此外,在观察到Oli CharlesworthCat Plus Plus时,printf不适用于C ++对象。请改用std::cout,或将std::string转换为const char*理解的printf

根据你的评论判断,你想要的东西是

std::vector<char> query(buff.size()*2+1);
int len =  mysql_real_escape_string(mysql, &query[0], (const char*)&buff[0], query.size());
query.resize(len);

这将转义buff中的二进制数据,以便安全地插入到mysql查询中。