如何将unsigned char *转换为QString

12

我知道这是一个非常基础的问题,但有时候你会忘记你的基本概念 :) 尝试过谷歌搜索,但那里也没有足够的支持。

我正在使用我们设备所有者提供的预定义库。它们有一个声明为:

unsigned char FamilySerialNum[0][8]

这个变量以十六进制形式获取设备的序列号。现在我正在使用Qt库将其显示在QLineEdit控件中,因此需要将其转换为QString类型。

尝试使用QString::UTF8、strcpy()、sprintf()等方法,但是得到的数据都是垃圾数据。

所以,有没有人能够建议一些方式来完成这个任务。


你可以尝试使用:QString var = new QString(char* varTwo);吗? - FacundoGFlores
@facunvd,我尝试了你的建议。它报错“请求将'QString*'转换为非标量类型'String'”。 - skg
1
@Steve-o,我知道这不是C语言,但我们应该找到一些方法在Qt中使用C语言。 - skg
4个回答

7

你好,请尝试下面的函数...

QString getStringFromUnsignedChar(unsigned char *str)
{

    QString s;
    QString result = "";
    int rev = strlen(str); 

    // Print String in Reverse order....
    for ( int i = 0; i<rev; i++)
        {
           s = QString("%1").arg(str[i],0,16);

           if(s == "0"){
              s="00";
             }
         result.append(s);

         }
   return result;
}

7

User1550798的回答非常接近但并不完全正确(有些输出是损坏的),因为它只将值“0”转换为前导零的2位输出(即:“00”)。相反,任何单个十六进制值都应该用零填充(即:“3”-->“03”)。

请尝试以下方法:

QString getStringFromUnsignedChar( unsigned char *str ){
    QString result = "";
    int lengthOfString = strlen( reinterpret_cast<const char*>(str) );

    // print string in reverse order
    QString s;
    for( int i = 0; i < lengthOfString; i++ ){
        s = QString( "%1" ).arg( str[i], 0, 16 );

        // account for single-digit hex values (always must serialize as two digits)
        if( s.length() == 1 )
            result.append( "0" );

        result.append( s );
    }

    return result;
}

1
这个操作可以反转吗?我需要将“unsigned char *str”转换为QString以便将其保存在文件中。但是我需要反转该操作以便在一个操作中使用“unsigned char *str”。 - sgallego

0

int lengthOfString = strlen(reinterpret_cast(str));//存在一个bug,当尝试获取类似于“00889966”这样的长度时

QString getStringFromUnsignedChar( unsigned char *str, const int len ){
    QString result = "";
    int lengthOfString = len  );

    // print string in reverse order
    QString s;
    for( int i = 0; i < lengthOfString; i++ ){
        s = QString( "%1" ).arg( str[i], 0, 16 );

        // account for single-digit hex values (always must serialize as two digits)
        if( s.length() == 1 )
            result.append( "0" );

        result.append( s );
    }

    return result;
}

-1

从 unsigned char* 到 QString:

unsigned char *str_uchar;
QString str = QString::fromUtf8((char*)str_uchar);

从QString到unsigned char*:

QString str;
unsigned char *str_uchar = (unsigned char*)(str.toUtf8().data());

最后一行可能会导致应用程序崩溃,因为 QByteArray (str.toUtf8().data()) 是周期性创建的! - jaques-sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接