最近在写一个QT程序。需要把QString 转换成char * 指针。结果遇到程序崩溃的严重错误。在大量的帮助调试下,发现是QString转换成char * 的时候,一定要定义一个QBateArray的变量。不能连写 。
以下是官方回复:
How can I convert a QString to char* and vice versa ?(trolltech)
Answer:
In order to convert a QString to a char*, then you first need to get a latin1 representation of the string by calling toLatin1() on it which will return a QByteArray. Then call data() on the QByteArray to get a pointer to the data stored in the byte array. See the documentation:
See the following example for a demonstration:
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QString str1 = "Test";
QByteArray ba = str1.toLatin1();
const char *c_str2 = ba.data();
printf("str2: %s", c_str2);
return app.exec();
}
Note that it is necessary to store the bytearray before you call data() on it, a call like the following
const char *c_str2 = str2.toLatin1().data();
will make the application crash as the QByteArray has not been stored and hence no longer exists.
To convert a char* to a QString you can use the QString constructor that takes a QLatin1String, e.g:
QString string = QString(QLatin1String(c_str2)) ;
差点给QT弄的精神崩溃。
分享到:
相关推荐
当QString内容包含汉字时,转换char*等会发生失败。此接口解决了该问题。使用后char*与unsigned char*的qDebug()输出与QString输出结果相同。 注意,该函数返回unsigned char*使用完毕后记得delete。
当Qt代码需要与非Qt的Windows API交互时,如调用WinAPI函数,就需要将QString转换成TCHAR*。本文将详细讲解如何有效地进行这种转换,并确保编译运行通过。 首先,了解QString和TCHAR*的基本概念。QString是Qt库中的...
- **QString到char**: 可以通过直接赋值的方式将单个字符的QString转换为char类型。 - 示例:`char a = 'b'; QString str = QString(a);` ##### 1.2 其他类型到QString的转换 - **int、double到QString**: 可以...
本文将详细介绍QT中各种类型之间的转换方法,包括但不限于`char*`与`QString`之间的转换、`QByteArray`与`QString`之间的转换等。 #### 一、`char*`与`QString`之间的转换 **1.1 `char*`转为`QString`** - **直接...
4. **`char*`与`const char*`之间的转换** - **示例代码**: ```cpp char* ch1 = "hello"; const char* ch2 = "world"; ch2 = ch1; // 不报错,但有警告 ch1 = (char*)ch2; ``` 5. **中文转换** - **中文...
在从QString转换到char *时,可以使用`toLatin1()`方法,并通过`data()`方法获取底层的char *指针。需要注意的是,`data()`返回的指针是只读的,因此不能用来修改原始字符串数据。 3. **int与QString之间的转换**...
在将`QString`对象赋值给`char*`时,通常需要将其转换为`Latin1`编码,因为`char*`通常用于存储ASCII或ISO-8859-1编码的字符。以下是一个例子: ```cpp QString qstr = "Hello, World!"; char* str = qstr.toLatin1...
这篇教程主要针对初学者,涵盖了Qt框架中的一些基本数据类型转换,包括字符串(QString)、整型(int)、浮点型(double)以及字符指针(char*)。下面是详细的知识点解析: 1. **QString到std::string的转换**: ...
本文主要介绍如何在QT中实现中文字符串的转换,以及如何在`QString`与C/C++中的`char*`或`std::string`之间进行相互转换。 #### 关键概念 - **QString**: 是QT框架中用于处理字符串的核心类,它提供了丰富的API来...
在需要ASCII值的情况下,可以使用`toLatin1()`方法将QString转换为QByteArray,然后根据需要处理字节。理解ASCII编码和QString之间的关系,对于进行跨平台的、底层的数据处理是非常重要的。在进行这类操作时,务必...
- **从QString转换为char***: ```cpp char* buf = rxStr.toLatin1().data(); ``` - **格式化字符串**: ```cpp QString str2 = QString("ADC:%1").arg(value); ``` #### 编码转换:UTF-8与GB2312 - **从GB...
- `c_str()` 方法可以将`std::string`对象转换为const char*,而`data()`方法则返回可读写的指针。 - 反向转换时,可以创建一个新的`std::string`对象,传递char*作为构造函数的参数。 2. **String与char数组之间...
int main(int argc, char* argv[]) { QApplication app(argc, argv); QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030")); QWidget *pWidget = new QWidget; QLabel label(pWidget); label....
这个例子展示了如何将一个包含ASCII字符的QString转换为QByteArray,然后逐个处理字节以显示ASCII字符。同时,也展示了如何将单个字节转换回QString。这个过程对于处理ASCII编码的数据或者进行字符编码转换是非常...
const char* json_str = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}"; cJSON* json_root = cJSON_Parse(json_str); cJSON* name = cJSON_GetObjectItem(json_root, "name"); cJSON* age = cJSON...
【CString 与 char*相互转换】: 1. **从 CString 到 char***:可以使用`GetBuffer`或`GetString`方法: ```cpp CString str = "Hello"; char* cStr = const_cast<char*>(str.GetString()); ``` 2. **从 char* ...
- **char* to QString**: - 示例:`const char *cStr = "Hello Qt"; QString str = QString::fromLocal8Bit(cStr);` - 结果:`str` 变为 `"Hello Qt"`。 - **char to number**: - 示例:`char c = '9'; int num ...
Qt基础开发之QString与QByteArray详细用法与区别及QString QByteArray互转 ...QString也可以转换成char*: QString str("123abc小马哥"); char* strChar = str.toLatin1().data(); 输出结果:"123abc???
在需要将QString转换为C风格的`char*`字符串时,可以使用`toLocal8Bit().data()`或`toStdString().data()`: ```cpp QString qstr = "hello,world"; const char *p1 = qstr.toLocal8Bit().data(); const char *p2 =...