char* 转换为 QString
char* c_str = "Hello, Qt!";
QString qstr = QString::fromUtf8(c_str); // 假设char*是UTF-8编码的
// 或者,如果char*是Latin1编码的:
QString qstrLatin1 = QString::fromLatin1(c_str);
QString 转换为 char*
QString qstr = "Hello, Qt!";
QByteArray ba = qstr.toUtf8(); // 转换为UTF-8编码的QByteArray
char* c_str = ba.data(); // 获取指向QByteArray内部数据的指针
// 注意:c_str 只在ba的生命周期内有效,并且不应该被修改或删除。
// 如果需要可修改的char*副本:
char* c_str_copy = qstrdup(qstr.toUtf8().constData());
// 使用完c_str_copy后,记得释放内存:
delete[] c_str_copy;
QString 转换为 QByteArray
QString qstr = "Hello, Qt!";
QByteArray ba = qstr.toUtf8(); // 转换为UTF-8编码的QByteArray
// 或者,如果你想要Latin1编码:
QByteArray baLatin1 = qstr.toLatin1();
QByteArray 转换为 QString
QByteArray ba = "Hello, Qt!";
QString qstr = QString::fromUtf8(ba); // 从UTF-8编码的QByteArray创建QString
// 如果知道QByteArray是Latin1编码的:
QString qstrLatin1 = QString::fromLatin1(ba);
QByteArray 转换为 char*
QByteArray ba = "Hello, Qt!";
char* c_str = ba.data(); // 获取指向QByteArray内部数据的指针
// 注意:c_str 只在ba的生命周期内有效,并且不应该被修改或删除。
// 如果需要可修改的char*副本:
char* c_str_copy = strdup(ba.constData());
// 使用完c_str_copy后,记得释放内存:
free(c_str_copy);
在所有这些转换中,需要注意的是:
char*
指针通常指向一个以 null 结尾的字符数组。在Qt中,你应该小心处理这些指针,确保它们指向的数据在需要时仍然有效,并且避免内存泄漏。QString
是Qt中用于处理字符串的类,它内部使用Unicode编码,可以方便地处理各种语言的字符。QByteArray
是Qt中用于处理字节数组的类,通常用于处理原始字节数据,如从文件或网络读取的数据。
当从 QString
或 QByteArray
获取 char*
指针时,务必注意这些指针的生命周期和所有权问题。通常,这些指针指向的是内部数据,它们的生命周期受限于原始对象。如果你需要修改这些数据或确保它们在原始对象之外仍然有效,你需要创建自己的副本。