3

文字列に 16 進文字を追加する必要があります。私はこれを試しています:

content += Character.toString((char) Integer.parseInt(Integer.toHexString(originalSize).toString(), 16));

それは機能originalSizeしていますが、127 (16 進数で 7F) を超えると、2 つの 16 進数値が返されます。

たとえば、次のようにします。

content += Character.toString((char) Integer.parseInt(Integer.toHexString(176).toString(), 16));

結果は次のとおりです。(content hex numbers) C0 B0

B0 は 16 進数で 176 ですが、C0 を削除する方法がわかりません。何か提案はありますか?ありがとう!

編集

Bluetooth Low Energy 経由で文字列をデバイスに送信したいと考えています。次のような文字列があります。

「ABCABC」。16 進数では41 42 43 41 42 43.

ここで、この文字列の形式を追加したいので (デバイスがそれを待っているため)、最後に追加します: 41 42 43 41 42 43 7E 06 02、ここで:

  • 7E: フォーマットの始まり
  • 06:文字数
  • 02: 製造元によって指定された特定の形式。

メインの文字列があり、この 3 つの 16 進数文字を手動で追加しています。

解決:

Devon_C_Miller の回答に基づいて、私は自分の解決策を見つけました:

contentFormated = new byte[originalSize+3];

for(int i=0;i<originalSize;i++){
    contentFormated[i] = content.getBytes()[i];
}

contentFormated[originalSize] = 0x7E;
contentFormated[originalSize+1] = (byte) 0xB0;
contentFormated[originalSize+2] = 0x02;
4

3 に答える 3

3

文字列ではなくバイト配列が必要なようです。

byte[] content = {0x42, 0x43, 0x41, 0x42, 0x43, 0x7E, 0x06, 0x02};
于 2012-04-21T12:01:41.667 に答える
2

ここでは、変換が前後するため、16進表記を忘れることができます。

文字0xB0(16進数)または他の表記176の10進数を実際に意味する場合は、次のようにします。

int c = 176;
content += Character.toChars(c);

文字列はUnicodeでエンコードされているため、他のバイトになる可能性があります。コメントで述べたように、バイト値が必要な場合は、最後にとを使用して、 byte[]以上のByteArrayOutputStreamを使用します。write(176)toByteArray


説明

ASCII範囲0〜127では、Character.toCharsは1バイトのUTF-8で表される1文字を提供します。

ISO-8859- *の範囲160-255でも、1文字、1バイト。128〜159の範囲には、ASCII 0〜32のように、主にUTF-8制御文字が存在します。

ただし、一部の値はUTF-8マルチバイトエンコーディングに使用されます。より高い値256-...は、1文字(16ビット)または複数の文字を与える可能性があります。

于 2012-04-21T11:57:11.777 に答える
0
hexString = String.format ("%x", 176); 

別のオプションです。

于 2012-04-21T12:23:32.680 に答える