2017-12-07 63 views
0

"\"の区切りのHEX値をQByteArrayに8つの別個のintにどのように解析できますか?個別のQByteArray 16進値をintに区切ります

QByteArray mainArray = "\xFF\xFF\x01\x04\x01\x0B\x03\xEC"; 
int num1; 
int num2; 
int num3; 
... 
+0

[ 'QByteArray'(http://doc.qt.io/qt-5/qbytearray.html)'オペレータを有します[] ' 'size()'メソッドのようなものです。これは 'std :: vector'のように使うことができます。 – Scheff

+0

'' \ xFF ''の実際の解析はC++コンパイラですでに行われていることに気づいていますか?これは文字列定数のコンパイル方法ですが、 'QByteArray'とは何の関係もありません。 'mainArray [0]'にアクセスすると '255'(または' 0xFF'のように)になります。 – Scheff

+0

私はmainArray [0](と1と2 ..)を試してみましたが、これらはÿのようなランダムなシンボルとそれにxが入ったボックスを含んでいます(コメントには表示されません)。 –

答えて

0

\xescape sequence文字列リテラルと文字リテラル内の16進数の値を表します。 \xに続く2つの16進数は、1バイトとして解析されます。たとえば:あなたはmainArrayに16進数で表された値にアクセスしたい場合は、次のよう

QByteArray foo1 = "\x46\x6f\x6f"; 
QByteArray foo2 = "Foo"; 

Q_ASSERT(foo1 == foo2); // 'foo1' and 'foo2' are equal 

は、単にQByteArray::atまたはsubscript operatorを使用します。

QByteArray mainArray = "\xFF\xFF\x01\x04\x01\x0B\x03\xEC"; 
int num1 = mainArray[0]; // 0xFF 
int num2 = mainArray[1]; // 0xFF 
int num3 = mainArray[2]; // 0x01 
// ... 

一つのことを、心の中で値の型を保つためにQByteArraycharであり、これは符号付きタイプであるため、ほとんどのシステムの\xFFは、255-1となります。言及した問題を解決するために、ここでの可能な解決策である。

QByteArray mainArray = "\xFF\xFF\x01\x04\x01\x0B\x03\xEC"; 
int num1 = 0xff & mainArray[0]; 
int num2 = 0xff & mainArray[1]; 
int num3 = 0xff & mainArray[2]; 
// ... 
+0

'int num1 = mainArray [0];'は問題を引き起こします(私のコメントの1つに指摘されているように)。符号拡張のために '0xFF'ではなく' 0xFFFFFFFF'(デフォルトでは32ビットの 'int'と' char'が署名されていると仮定します)を提供しません。私はまた別のコメントでそれを修正する方法を述べた。 – Scheff

+0

@Scheff、ありがとう、私は答えを広げた。 – Akira

関連する問題