Search…

Chuyển Đổi từ ASCII String thành ASCII Char Array

22/09/20202 min read
Hàm chuyển đổi qua lại giữa ASCII std::string và ASCII C String.

Xem ví dụ bên dưới:

void Animation::initAnimation(SDL_Renderer *pRenderer)
{
	_pRenderer = pRenderer;
	_pTexture = IMG_LoadTexture(_pRenderer, _sprite.getNameTexture());
}

Sử dụng hàm IMG_LoadTexture để load ảnh, tham số thứ 2 của hàm này cần truyền vào kiểu char* do thư viện này đang viết bằng C mà project hiện tại đang base trên C++, như vậy cần các hàm chuyển đổi qua lại giữa 2 kiểu dữ liệu này string ↔ char*. Đây cũng là vấn đề tương thích C và C++.

Trường hợp cần lấy char*

void test(char *c)
{
	cout << c;
}
 
int main()
{
	string str = "A String";
	// test(str); // error

	return 0;
}

Trong trường hợp trên cần truyền giá trị của biến str vào hàm test(). Tham số của hàm test() lại là kiểu char* trong khi str lại là kiểu string. Vậy gọi được hàm này phải chuyển đổi kiểu string sang char*.

Cách lấy char* từ string

string str = "Get const char* From string";
const char* str = str.c_str();

Đối tượng string (std::string) hỗ trợ một phương thức c_str() để lấy vùng nhớ thuộc tính kiểu const char* chứa chuỗi, nhưng dữ liệu này chỉ có thể đọc không thể thay đổi, nếu cần thay đổi cần sao chép dữ liệu này sang 1 chuỗi khác.

Code mẫu bằng C

#include <string>
using namespace std;

int main() 
{ 
	string str = "Convert string To char*"; 

	char* c = new char[str.size() + 1];
	strcpy(c, str.c_str());
		
	delete[] c; 
		
	return 0; 
}

Trường hợp ngược lại - char* sang string

Trường hợp chuyển đổi từ char* sang std::string sẽ đơn giản hơn do string được hỗ trợ constructor và operator= để hình thành dữ liệu string từ char*.

#include <string>
using namespace std;

int main() 
{ 
	const char* c1 = "Convert char* To string 1";
	const char* c2 = "Convert char* To string 2";

	string str = c1;
	str = c2;
		
	return 0; 
}
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024