zoukankan      html  css  js  c++  java
  • QString和char字符数组之间的转换(QTextCodec.toUnicode方法,特别注意的问题)

    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)) ;

    还有其他多种方法:

    方法一 -----------------------------------------
    #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]='';
    
    
    QString ss(byy);
    如果不让 byy[8]='';那么字符串会很大,因为转换时,找不到结束标志'',所以加上后就正确了


    http://blog.sina.com.cn/s/blog_a401a1ea0101fh1f.html
  • 相关阅读:
    html iframe 滚动条
    Angular-Ant Desigin 开篇
    端口访问不了的原因
    swift 加载 本地html 和 网络路径
    xcode9.4 报错 error:The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.
    viewDidLoad, viewWillDisappear, viewWillAppear等区别及各自的加载顺序
    JavaScript设计模式之一Interface接口
    ES6原生Class
    react portals
    react-native-pushy 热更新
  • 原文地址:https://www.cnblogs.com/findumars/p/5962485.html
Copyright © 2011-2022 走看看