C++string与vector及buffer互相转换

一般利用其构造函数或assign赋值;

1. char buffer[] 与 string 互转
buffer --> string
string str(buffer);
str.assign(buffer);
str.assign(buffer, strlen(buffer));
str.assign(buffer, sizeof(buffer)/sizeof(buffer[0])-1);

string --> buffer
strncpy(buffer, str.c_str(), str.size()+1); //+1 include '\0';
std::copy(str.begin(), str.end(), buffer);

2. char buffer[] 与 vector<char> 互转
buffer --> vector<char>
vector<char> vec(buffer, buffer+sizeof(buffer)/sizeof(buffer[0]-1)); //will assign length char
vec.assign(buffer, buffer+sizeof(buffer)/sizeof(buffer[0])-1); //will assign length char

vector<char> --> buffer
std::copy(vec.begin(), vec.end(), buffer);

3. string 与 vector<char> 互转
string --> vector<char>
vector<char> vec(str.begin(), str.end());
vec.assign(str.begin(), str.end());

vector<char> --> string
string str(vec.begin(), vec.end());
str.assign(vec.begin(), vec.end());
 

参考代码如下

/*****************************************
* Copyright (C) 2020 * Ltd. All rights reserved.
* File name   : string.buff.vector.convert.cpp
*******************************************/

/*
 * #include <cstdio>
 * #include <cstdlib>
 * #include <cstring>
 */
#include <iostream>
#include <string>
#include <vector>
using namespace std;

#define print(s) do {cout << "[" << __func__ << "] " << #s << ": "  << s << endl;} while (0);

template <class T>
void show(T& val)
{
	typename T::iterator it;
	cout << "[" << __func__ << "]: ";
	for (it = val.begin(); it != val.end();)
	{
		cout << *it;
		it++;
		if (it != val.end()) {
			cout << ", ";
		}
	}
	cout << endl;
}

void buffer2string()
{
	char buffer[] = "hello 1234567890";
	string str(buffer);
	print(str);

	string str0;
	str0.assign(buffer);
	print(str0);

	string str1;
	str1.assign(buffer, sizeof(buffer)/sizeof(buffer[0])-1);
	print(str1);
}

void string2buffer()
{
	char buffer[20] = { 0 };
	string str = "hello 1234567890";

	/*
	 * strncpy(buffer, str.c_str(), str.size()+1);
	 * print(buffer);
	 */

	char buffer2[20] = { 0 };
	std::copy(str.begin(), str.end(), buffer2);
	print(buffer2);
}

void buffer2vector()
{
	char buffer[] = "hello 1234567890";
	vector<char> vec(buffer, buffer+sizeof(buffer)/sizeof(buffer[0])-1);
	show(vec);

	vector<char> vec2;
	vec2.assign(buffer, buffer+sizeof(buffer)/sizeof(buffer[0])-1);
	show(vec2);
}

void vector2buffer()
{
	char tmp[20] = "hello 1234567890";
	vector<char> vec(tmp, tmp+sizeof(tmp)/sizeof(tmp[0]));

	char buffer[20];
	std::copy(vec.begin(), vec.end(), buffer);
	print(buffer);
}

void string2vector()
{
	string str = "hello 1234567890";
	vector<char> vec(str.begin(), str.end());
	show(vec);

	vector<char> vec2;
	vec2.assign(str.begin(), str.end());
	show(vec2);
}

void vector2string()
{
	string tmp = "hello 1234567890";
	vector<char> vec(tmp.begin(), tmp.end());

	string str(vec.begin(), vec.end());
	print(str);

	string str2;
	str2.assign(vec.begin(), vec.end());
	print(str2);
}

int main() {
	buffer2string();
	string2buffer();
	buffer2vector();
	vector2buffer();
	string2vector();
	vector2string();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/halazi100/article/details/103873378
今日推荐