中文的char*怎么转换成QString

作者&投稿:种劳 (若有异议请与网页底部的电邮联系)
中文的char*怎么转换成QString~

Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换
Qt再使用第三方开源库时,由于库的类型基本上都是标准的类型,字符串遇的多的就是Char*类型
在Qt下怎样将QString转char*呢,需要用到QByteArray类,QByteArray类的说明详见Qt帮助文档。
因为char*最后都有一个‘/0’作为结束符,而采用QString::toLatin1()时会在字符串后面加上‘/0’
方法如下:
Qstring str;
char* ch;
QByteArray ba = str.toLatin1();
ch=ba.data();
这样就完成了QString向char*的转化。经测试程序运行时不会出现bug
注意第三行,一定要加上,不可以str.toLatin1().data()这样一部完成,可能会出错。

补充:以上方法当QString里不含中文时,没有问题,但是QString内含有中文时,转换为char*就是乱码,采用如下方法解决:
方法1:
添加GBK编码支持:
#include
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
然后改变上面的第三行为:QByteArray ba = str.toLoacl8Bit(); toLoacl8Bit支持中文
方法2:
先将QString转为标准库中的string类型,然后将string转为char*,如下:
std::string str = filename.toStdString();
const char* ch = str.c_str();

QString string = QString(QLatin1String(c_str2)) ;
还有其他多种方法:
方法一 -----------------------------------------
#define G2U(s) ( QTextCodec::codecForName("GBK")->toUnicode(s) )
#define U2G(s) ( QTextCodec::codecForName("GBK")->fromUnicode(s) )
QString str;
QCString cstr;
str = G2U("中文输入");
cstr = U2G(str);
QCString有这样一个重载运算符
operator const char * () const
可以这样
printf("%s/n", (const char*) cstr);
或是copy出来
char buf[1024];
strcpy(buf, (const char*) cstr);
方法二 -----------------------------------------
如果是中文系统
直接用 (const char*) str.toLocal8Bit()
例如
printf("%s", (const char*) str.toLocal8Bit());
str是一个QString
方法三 -----------------------------------------
char str[64];
QTextCodec *textcod = QTextCodec::codecForName("GBK");
QCString string1 = textcod ->fromUnicode(listbox1->currentText());
strcpy(str,string1);
QString和Std::string
从char*到 QString可以从fromLocal8Bit()转化
std::string有c_str()的函数使再转化为char*
QString有toAscii()记不清了

你可以看看.

又是我的粗心酿成大错,我重新查看了一下Qt文档,原来Qt可以直接从std::wstring产生一个QString,用QString::fromStdWString(const std::wstring &)这个静态成员函数即可。我试了试用std::string的c_str()返回的char *构造的QString不能再保存原先的中文信息,而用std::wstring构造的QString则可以用qDebug()输出原先的中文信息
GB编码与UTF8编码的转换
在主函数app后加上这句:
QUOTE:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB18030"));
然后是从UTF8编码到GB编码的字符串转换方法:
QUOTE:

QString Utf8_To_GB(QString strText)
{
return QString::fromUtf8(strText.toLocal8Bit().data());
}
至于从GB到UTF8,那大家就经常用了:
QUOTE:
QString GB_To_Utf8(char *strText)
{
return QString::fromLocal8Bit(strText);
}


》》》》》》》》
把字符数组转换成QString或者String
char * byy=new char[9];
byy[8]='\0';

QString ss(byy);
如果不让 byy[8]='\0';那么字符串会很大,因为转换时,找不到结束标志'\0',所以加上后就正确了

Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换
Qt再使用第三方开源库时,由于库的类型基本上都是标准的类型,字符串遇的多的就是Char*类型
在Qt下怎样将QString转char*呢,需要用到QByteArray类,QByteArray类的说明详见Qt帮助文档。
因为char*最后都有一个‘/0’作为结束符,而采用QString::toLatin1()时会在字符串后面加上‘/0’
方法如下:
Qstring str;
char* ch;
QByteArray ba = str.toLatin1();
ch=ba.data();
这样就完成了QString向char*的转化。经测试程序运行时不会出现bug
注意第三行,一定要加上,不可以str.toLatin1().data()这样一部完成,可能会出错。

补充:以上方法当QString里不含中文时,没有问题,但是QString内含有中文时,转换为char*就是乱码,采用如下方法解决:
方法1:
添加GBK编码支持:
#include <QTextCodec>
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
然后改变上面的第三行为:QByteArray ba = str.toLoacl8Bit(); toLoacl8Bit支持中文
方法2:
先将QString转为标准库中的string类型,然后将string转为char*,如下:
std::string str = filename.toStdString();
const char* ch = str.c_str();


C语言里的文件操作 char *filename="D:\\\\myfile.txt";这样赋值总是报错...
需要的是不是文件指针?标准C中的文件操作函数,大部分需要文件文件流指针。FILE *fptr 字符串指定文件路径,fopen用?你检查一下你调用的那个函数。

二进制rb方式把UTF8的文本读到了char*里,能不能转成ASCII?
int targetLen=WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,(char *)pTargetData,0,NULL,NULL);pTargetData=new BYTE[targetLen+1];memset(pTargetData,0,targetLen+1);WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,(char *)pTargetData,targetLen,NULL,NULL);LPSTR sz...

使用CFile从txt文件中以char*读入字符后转换为CString后乱码_百度...
你的工程是不是UNICODE类型的?你的字符串是ANSI类型,也就是CHAR类型,转换成WCHAR就会乱码。

int main(int argc, char *argv[])是什么意思
1、int argc 代表参数的个数,默认为1(一般为可执行文件名或者可执行文件的绝对路径)2、char *argv[] 为参数值数据,为字符串数组,例如:argc = 1,那么 argv[0] 就是参数1的内容 3、作用:在执行程序时传参

...char*argv[ ]) 这个是什么来的?括号里面的中括号来可以填什么?填的...
C语言规定main函数的参数只能有两个, 习惯上这两个参数写为argc和argv。因此,main函数的函数头可写为: main (argc,argv)C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。加上形参说明后,main函数的函数头应写为:main (argc,argv)int argv;char *...

定义函数char *filename(char *file, int num) 要求:输入一个文件名:te...
include <stdio.h>#include <string.h>#include <stdlib.h>#include <malloc.h>char *filename(char *file, int num){ int i; char *buf = (char *)malloc(300); for (i = 0; file[i]; i++) { if (file[i] != '.') buf[i] = file[i]; else { ...

C语言怎样读取文本的每一行
可以使用fgets函数来实现。1 函数名:fgets 2 声明形式:char *fgets(char *buf, int bufsize, FILE *stream);3 头文件:stdio.h 4 功能及参数说明:从stream中读取一行数据存到buf中。如果数据长度小于bufsize,那么读入整行数据,并将换行符转换为字符串结束符\\0。 如果数据长度超过bufsize,那么...

c语言中main函数参数写上int argc,char*argv到底是什么意思?什么作用...
argc是你主程序参数的个数。argv[0]是你编译出来执行时候程序的名字。argv[1]...是你主程序需要的参数。举例说明:如下程序 aa.c include<stdio.h> include<stdlib.h> include<stdring.h> int main(int argc, char *argv[]){ printf("%d\\n",argc);printf("%s\\n",argv[0]);printf("%s...

C语言中如何将char[]转换为float?
atof()函数,可以把字符串(字符数组)转成float,相应的有atoi可以转成int,itoa()从int到字符串等

用VB怎样把输入的密码变成星号(*)显示出来?
只要将textbox设置属性PARRWORDCHAR为“*”即可,如:textbox1.PasswordChar = '*';TextBox组件使用虽然比较简单,但TextBox类的构成成员却是非常的丰富。在一般性的编程中,主要涉及到三类:属性、方法和事件。其中属性PasswordChar 获取或设置字符,该字符用于屏蔽单行。把文本框的passwordchar属性设置为"*...

东风区14776358001: 中文的char*怎么转换成QString -
姓蒲艾尔: Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换 Qt再使用第三方开源库时,由于库的类型基本上都是标准的类型,字符串遇的多的就是Char...

东风区14776358001: 怎么把unsigned char *ch 转换成QString -
姓蒲艾尔: unsigned char* ch; QString str=""; str=str.append(ch); 或者str+=ch; 你就这样用就可以了,没有问题的,要是真的还有问题就把ch先转成QChar

东风区14776358001: 如何将中文的QString转换为char -
姓蒲艾尔: Qt5:char *ch = "中文的char*如何转换成QString?"; QString str(ch); Qt4 :char *ch = "我是中文"; QString str = QString::fromUtf8(ch));

东风区14776358001: const char *怎么转qstring -
姓蒲艾尔: 你是要输出还是什么,要是输出QString到控制台的话 std::cerr<<qPrintable(str); 不知道你是要做啥?QString应该是QChar的封装,QString不是比数组来的方便吗? 你是要用字符串算法还是什么?为啥要转换成const char *?具体做法 QString str; const char * cch; QByteArray arr=str.toLatin1(); cch=arr.data(); foreach(QString str,myStringList){//use the convert method above }

东风区14776358001: 怎么用QDebug打印出QString -
姓蒲艾尔: 首先“QString::fromWCharArray”表示数据来源是wchar_t*,其次qDebug()只能输出char*,因此需要QString中的数据转换为char*再输出.方法:使用QString的toStdWString()方法转换为wchar_t*,然后在使用API-WideCharToMultiByte函数将wchar_t*转换为char*,输出即可.其实要是输出wchar_t*的调试信息最好用API-OutputDebugStringW函数

东风区14776358001: C++中如何把char*转换成string*? -
姓蒲艾尔: 本来,如果代码中用了string,就没必要再使用char*处理字符串.如果非要做这样的转换,可以这样:char *S =new char[temp_len]; std::string s1(S); //这里调用string的一个带参数的构造函数,相当于将*S做 //一个拷贝 std::string *PStr=&s1; //不能将*string直接指向char*如果要将string转换为char*,可以使用string提供的函数c_str() ,或是函数data(),data除了返回字符串内容外,不附加结束符'\0',而c_str()返回一个以'\0'结尾的字符数组.欢迎追问

东风区14776358001: string 重写加号运算符 Mystring operator(char* a) -
姓蒲艾尔: char*转换 Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换 Qt再使用第三方开源库时,由于库的类型基本上都是标准的类型,字符串遇的多...

东风区14776358001: 如何将char * 转化成LPCWSTR -
姓蒲艾尔: 你使用的Unicode代码,要转换比较麻烦 可以用第二种办法,先转换成wchar_t,然后再用WideCharToMultiByte函数转换成char*

东风区14776358001: 32位API函数 和16位API函数有什么差别 如WM - VSCROLL为16位而SetScrollRange为32位 -
姓蒲艾尔: 功能上没啥差别,16位是以前的,自从NT出现后都用32位了,现在64位都开始慢慢普及了,16位会被微软慢慢淘汰.一般来说,新版本的功能要强大一些.

东风区14776358001: char*怎么转换string -
姓蒲艾尔: 直接转就可以啦: char *abc = "fuck you"; string str = abc;这样就可以了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网