字符串流变量不显示在二进制代码中

Stringstream variable does not show in binary code?

本文关键字:二进制 代码 显示 变量 字符串      更新时间:2023-10-16

为什么字符串流查询变量不工作?

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);

我得到错误:

jmp _escape_string_for_mysql+0F2h (40CFA2h) 0040CF61 mov艾尔,字节ptr (edi) & lt ;--------------------------------------- 错误点0040CF63 movsx exx,al 0040CF66 cmp exx,5Ch 0040CF69 ja_escape_string_for_mysql+0E5h (40CF95h)

因为你用错了printf。最好不要使用printf

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

同样,在这里指定binary几乎是无用的,in/out是多余的(stringstream是默认的in/out)。

stringstream::binary并不像你想象的那样。

stringstream::binary使流不将系统换行符转换为c++换行符。stringstream::text使流将系统换行符转换为c++换行符。
这两种方法都不能将流读取或写入为"二进制代码"。

c++的换行符是n,而Windows系统的换行符是rn(两个字符!),linux只使用n。我听说Mac系统的换行符是/是nr,但我不能确认。

同样,正如Oli Charlesworth和Cat Plus Plus所观察到的,printf不能与c++对象一起工作。使用std::cout代替,或者将std::string转换成printf可以理解的const char*

从你的评论来看,你想要一些类似

的东西
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查询中。