-1

重要な質問があります:

bye[] (最大 4 バイト) ウィッチに格納されている 16 進値を送信する必要があります。Android 電話アプリケーションのテキストビューに入力しました。

    mSendButton.setOnClickListener(new OnClickListener() { // clickonbutton to send data
        public void onClick(View v) {
            // Send a message using content of the edit text widget
            TextView view = (TextView) findViewById(R.id.edit_text_out); 
            byte[] message = view.getText().toString().getBytes();
            sendMessage(message); // message needs to be a byte []
        }
    });

たとえば、0x1020 と入力して送信ボタンを押すと、バイト [] = {0x1020} が必要になります。

toString 関数 (5 行目) は、生の受信バイトを他の値に変換します。法的な代替は次のようになります。

     CharSequence values= view.getText();

最初の 2 つの値が 0x で、その後に 2 バイトまたは 4 バイト (16 進数表示) のデータがあることが重要です。

私を助けてくれてありがとう!

4

2 に答える 2

0

Find a library that does this (in my classpath alone there are 10. Surely you can find one appropriate for your project):

org.springframework.security.crypto.codec.Hex.decode(someString);

public static byte[] decode(CharSequence s) { int nChars = s.length();

if (nChars % 2 != 0) {
    throw new IllegalArgumentException("Hex-encoded string must have an even number of characters");
}

byte[] result = new byte[nChars / 2];

for (int i = 0; i < nChars; i += 2) {
    int msb = Character.digit(s.charAt(i), 16);
    int lsb = Character.digit(s.charAt(i+1), 16);

    if (msb < 0 || lsb < 0) {
        throw new IllegalArgumentException("Non-hex character in input: " + s);
    }
    result[i / 2] = (byte) ((msb << 4) | lsb);
}
return result;
}
于 2013-05-18T00:43:40.917 に答える
-1
  • を使用して、文字列が「0x」で始まるかどうかを確認しますmessage.startsWith("0x")
  • 文字列から最初の 2 文字を削除する
  • 使用Integer.parseInt(message, 16): 16 は、文字列から 16 進数を解析しようとすることを意味します。
  • 結果を に格納しbyte[]ます。1 バイトは 127 までしか保持できないことに注意してください。

これが役立つことを願っています。

編集:この質問への回答、結果をバイト配列に格納するのに役立つ場合があります。

于 2013-05-18T00:29:28.873 に答える