2012-01-20 82 views
1
QByteArray inArray = " ... "; 
unsigned char *in = convert1(inArray); 
unsigned char *out; 
someFunction(in, out); 
QByteArray outArray = convert2(out); 

質問はどうすればこれらの変換を正しく行うことができますか(convert1とconvert2)。 someFunction(unsigned char *、unsigned char *)を変更できませんが、ここでQByteArrayを使用する必要があります。QByteArrayからunsigned charに変換する*

答えて

5

Qtは本当に素晴らしいですdocs、あなたはそれらを使用する必要があります。

someFunctionは変更またはデータであなたがこれを使用することができますへのストアポインターていない場合は、次の

QByteArray inArray = " ... "; 
unsigned char *out; 
someFunction((unsigned char*)(inArray.data()), out); 
QByteArray outArray((char*)out); 

そうでなければ、あなたがchar *(QByteArray ::データで返される)の深いコピーを作成する必要があります(参照コードスニペット用のドキュメント)。

+0

'QByteArray outArray = QByteArray :: fromRawData(うち、strlenを(アウト));'あなたが使用しない場合は、 'out'を。 – graphite

+0

fromRawDataを使用すると、「unsigned char *からconst char *への無効な変換」が発生します。私はQByteArray :: fromRawData(reinterpret_cast (out)、part.length())を試しました。 – Eddie

+0

chalupによる解決策は良いと思われ、私は前にそれを試しましたが、エラーが出ます。どうやら、このケースは他のものにあるようです。 – Eddie

0

someFunctionconst char*の場合、ConstData()またはdata()QByteArrayクラスに使用してください。

char*が必要な場合は、strdup()を使用できます。この方法は、ここでは、この

char *strdup (const char *s) { 
    char *d = malloc (strlen (s) + 1); // Space for length plus nul 
    if (d == NULL) return NULL;   // No memory 
    strcpy (d,s);      // Copy the characters 
    return d;       // Return the new string 
} 

の詳細情報をやっている:strdup() - what does it do in C?

+0

それはconstについてではありません。それは無署名についてです。 – user1319829

関連する問題