12

我知道这是一个非常基本的问题,但有时你会失去基本概念:) 尝试过 Goggling,但也没有足够的支持。

我正在使用我们的设备所有者之一的预定义库。他们有一个声明:

unsigned char FamilySerialNum[0][8]

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

尝试使用 QString::UTF8、strcpy()、sprintf() 等但得到垃圾数据。

所以任何人都可以建议我一些方法来完成它。

4

4 回答 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;
}
于 2012-09-14T02:36:10.067 回答
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;
}
于 2013-07-18T03:08:59.193 回答
0

int lengthOfString = strlen( reinterpret_cast(str) );//错误,当尝试获取像“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;
}
于 2014-06-17T03:15:55.863 回答
-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());
于 2018-02-28T13:53:52.510 回答