2013-07-15 379 views
5

これは非常に基本的な質問ですが、私はQtの初心者です。 QString値( "AA110011"など)を16進数に変換しようとしています。私は0xaa110011を取得したいと思います。 「[0]」値0Aの0A 01 01 00 00 01 01私はVairableでメモリに取得Qt:QStringを16進数に変換する

QByteArray b = aString.toUtf8(); 

for (int i = 0; i < b.length(); i++) 
{ 
    if (b[i] >= 65 && b[i] <= 70) 
    { 
     b[i] = b[i] - 55; 
    } 
    else if (b[i] >= 48 && b[i] <= 57) 
    { 
     b[i] = b[i] - 48; 
    } 
} 

と私はAA 11 00を得ることができたのか分からない。私はこのコードを試してみました11.

お手伝いできますか?ありがとう。 。

+1

int QString :: toInt(bool * ok = 0、int base = 10)const'を使用しない理由はありますか? – mah

+1

'' int値= QString( "AA110011")。toInt(NULL、16); '' mahに加えて。 '' char c [4-i] =(char)((値>> i * 8)&0xFF) '' –

答えて

2

あなたは以下の

QStringのRES = string.toAscii()toHexを行うことができますQStringのを持っていたら(); qDebug()< < res;

reference

+0

ASCIIエンコードの16進値を返します文字列の内容であり、番号ではありません。 –

+1

どのような形式で番号を欲しいですか?あなたはsetNum(decimalNumber、16)メソッドを使って数値を文字列に変換することができます。同様に、文字列の形式で任意の塩基を得ることができますが、私が知る限り、QTでは16進数のデータ型はありません –

5

例えば、QString::toIntQString::toUIntQString::toLong等を試してください。

const QString str = QLatin1String("AA110011"); 
bool ok; 
const unsigned int parsedValue = str.toUInt(&ok, 16); 
if (!ok) { 
    //Parsing failed, handle error here 
} 

qDebug() << parsedValue; 

第二引数は、16進数は、この場合にはベース、16です。

このソリューションは、文字列が符号なしlong longまたはlongに収まる場合に機能します。任意の長い文字列をそのように変換する場合は機能しません。

関連する問題