Qt中QString,int,char,QByteArray之间相互转换

int 转 QString
int m=1;
QString b;
b=QString::number(m)

QString 转int
QString a="1111"
int b;
b=a.toInt()

char 转换为 QString
char a='b';
QString str;
str=QString(a);

QString 转换为 char
QString str="qq";
char *ch;
ch = str.toLatin1.data();

char * 与 const char *的转换
char *ch1="tt";
const char *ch2="qq";
ch2 = ch1;//不报错,但有警告
ch1 = (char *)ch2;

QByteArray 转换为 char *
char *ch;//不要定义成ch[n];
QByteArray byte;
ch = byte.data();

char * 转换为 QByteArray
char *ch;
QByteArray byte;
byte = QByteArray(ch);

QString 转换为 QByteArray
QByteArray byte;
QString string;
byte = string.toAscii();

QByteArray 转换为 QString
QByteArray byte;
QString string;
string = QString(byte);
示例:
qDebug()<<"qq";
qDebug()<<tr("tt");
qDebug()<<ch;(ch 为char类型)
qDebug()<<tr(ch);
qDebug()<<byteArray;(byteArray是QByteArray类型)
qDebug()<<tr(byteArray);
qDebug()<<str;(str 为Qstring类型)
但是qDebug()<<tr(str);是不可以的,要想用tr()函数输出QString类型的字符则要如下:
qDebug()<<tr(str.toLatin1);

### QString 与 unsigned char转换操作 在 Qt 中,`QString` 和 `unsigned char` 之间转换是一个常见的需求,尤其是在处理二进制数据或需要与 C 风格字符串交互时。以下是详细的转换方法和示例代码。 #### 1. **QString 转 unsigned char*** 将 `QString` 转换为 `unsigned char*` 可以通过以下步骤实现: - 将 `QString` 转换为 `QByteArray`。 - 使用 `QByteArray::data()` 或 `QByteArray::constData()` 获取底层的 `char*` 或 `const char*`。 - 最后将 `char*` 转换为 `unsigned char*`。 示例代码如下: ```cpp QString str = "example"; QByteArray byteArray = str.toUtf8(); // 将 QString 转换QByteArray unsigned char *ucharPtr = reinterpret_cast<unsigned char*>(byteArray.data()); // 转换为 unsigned char* ``` 这种方法适用于需要将 `QString` 数据传递给需要 `unsigned char*` 参数的函数[^1]。 #### 2. **unsigned char* 转 QString** 将 `unsigned char*` 转换为 `QString` 有多种方法,具体取决于数据的内容和编码方式。以下是几种常见方法: - **直接转换**:如果 `unsigned char*` 包含的是文本数据(如 ASCII 或 UTF-8 编码),可以直接使用 `QLatin1String` 或 `QString::fromUtf8` 进行转换。 示例代码: ```cpp unsigned char ucharArr[] = {'H', 'e', 'l', 'l', 'o', '\0'}; QString str = QString::fromLatin1(reinterpret_cast<char*>(ucharArr)); // 使用 fromLatin1 ``` - **通过 QByteArray**:如果需要更灵活的控制,可以先将 `unsigned char*` 转换为 `QByteArray`,然后再转换为 `QString`。 示例代码: ```cpp unsigned char ucharArr[] = {0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x00}; // Hello QByteArray byteArray(reinterpret_cast<char*>(ucharArr), sizeof(ucharArr) - 1); QString str = QString::fromUtf8(byteArray); // 使用 fromUtf8 ``` - **十六进制表示**:如果 `unsigned char*` 表示的是二进制数据,可以通过逐字节转换为十六进制字符串。 示例代码: ```cpp QString ucharToHexString(const unsigned char *data, int len) { QString result; for (int i = 0; i < len; ++i) { result.append(QString("%1").arg(data[i], 2, 16, QLatin1Char('0'))); } return result; } unsigned char data[] = {0x0A, 0x10, 0xFF}; QString hexStr = ucharToHexString(data, sizeof(data) / sizeof(unsigned char)); ``` 这种方法适用于需要将二进制数据表示为可读字符串的情况[^4]。 #### 3. **注意事项** - 在进行类型转换时,必须确保数据的编码方式正确。例如,如果数据是 UTF-8 编码,则应使用 `QString::fromUtf8`;如果是 Latin-1 编码,则应使用 `QString::fromLatin1`。 - 使用 `reinterpret_cast` 时需谨慎,确保指针类型兼容且不会导致未定义行为。 - 如果数据包含二进制内容(非文本),则需要明确如何表示这些数据(如十六进制字符串)[^3]。 --- ### 示例总结 以下是完整的示例代码,展示 `QString` 和 `unsigned char*` 的相互转换: ```cpp #include <QString> #include <QByteArray> #include <QDebug> // unsigned char* 转 QString QString ucharToString(const unsigned char *data, int len) { QByteArray byteArray(reinterpret_cast<const char*>(data), len); return QString::fromUtf8(byteArray); } // QString 转 unsigned char* unsigned char* stringToUchar(const QString &str) { QByteArray byteArray = str.toUtf8(); return reinterpret_cast<unsigned char*>(byteArray.data()); } int main() { // unsigned char* 转 QString unsigned char ucharArr[] = {'H', 'e', 'l', 'l', 'o', '\0'}; QString str = ucharToString(ucharArr, sizeof(ucharArr) - 1); qDebug() << "unsigned char* to QString:" << str; // QString 转 unsigned char* QString qstr = "World"; unsigned char *ucharPtr = stringToUchar(qstr); qDebug() << "QString to unsigned char*:" << reinterpret_cast<char*>(ucharPtr); return 0; } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值