stringstream和char在一起时需要注意

972 篇文章 329 订阅
309 篇文章 11 订阅

       最近碰到了一个stringstream和char联合使用的奇怪bug,  本文不具体说这个bug.


       来看看程序:

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

void test(const string &s1, const string &s2)
{
	cout << s1 << endl;
	cout << s2 << endl;
	if(s1 == s2)
	{
		cout << "yes" << endl;
	}
	else
	{
		cout << "no" << endl;
	}
}

int main()
{
	int c1 = '6';
	stringstream ss1;
	ss1 << c1;

	char c2 = '6';
	stringstream ss2;
	ss2 << c2;

	test(ss1.str(), ss2.str());

	return 0;
}
     结果:

54
6
no


     呵呵, 要小心啊。 再看:

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

void test(int x, int y)
{
	cout << x << endl;
	cout << y << endl;

	if(x == y)
	{
		cout << "yes" << endl;
	}
	else
	{
		cout << "no" << endl;
	}
}

int main()
{
	stringstream ss;
	ss << 2;

	int c1;
	ss >> c1;

	char c2;
	ss >> c1;

	test(c1, c2);

	return 0;
}
      结果:

2
0
no


      小心。



怎样修改这段代码让他让视频保存到本地并上传到数据库中void ShowVideo() { //创建数据库连接 MYSQL mysql; mysql_init(&mysql); mysql_real_connect(&mysql, "localhost", "root", "password", "database", 3306, NULL, 0); mysql_query(&mysql, "set names utf8"); SOCKET server = socket(AF_INET, SOCK_STREAM, 0); char buffer[2048] = " "; SOCKET sockConn = accept(server, NULL, NULL); Mat videoData; while (true) { int bytes = recv(sockConn, buffer, 2048, 0); if (bytes <= 0) break; // 将接收到的视频数据拼接在一起 videoData.push_back(Mat(1, bytes, CV_8UC1, buffer).clone()); } closesocket(sockConn); size_t fileSize = 0; std::ofstream videoFile("server_video.avi", std::ios::binary | std::ios::app); while (true) { int bytes = recv(sockConn, buffer, 2048, 0); if (bytes <= 0) break; fileSize += bytes; // 将接收到的视频数据写入到.avi文件中 std::ofstream videoFile("server_video.avi", std::ios::binary | std::ios::app); videoFile.write(buffer, bytes); } videoFile.close(); VideoWriter writer("server_video.avi", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), 25.0, Size(640, 480)); if (writer.isOpened()) { writer.write(videoData); } //读取视频文件内容并保存到数据库 ifstream fin("server_video.avi", ios::binary | ios::in); if (!fin) { cout << "打开文件失败" << endl; exit(0); } fin.seekg(0, ios::end); int filesize = fin.tellg(); fin.seekg(0, ios::beg); char* fileContent = new char[filesize]; fin.read(fileContent, filesize); string fileContentStr(fileContent, filesize);
07-15
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值