如何将unsigned char*转换为QString

skg*_*skg 10 c qt

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

我正在使用我们的设备所有者预定义的库.他们的声明如下:

unsigned char FamilySerialNum[0][8]
Run Code Online (Sandbox Code Playgroud)

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

尝试使用QString :: UTF8,strcpy(),sprintf()等但获取垃圾数据.

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

小智 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;
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*chy 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;
}
Run Code Online (Sandbox Code Playgroud)