11

私はこのような文字列を持っています:

init_thread = "2b11020000ed"

私はこれを行うために、Bluetooth経由でこの文字列を送信する必要があります:

byte[] init = init_thread.getBytes();
GlobalVar.mTransmission.write(init);

私が必要とするのは、init_thread文字列をバイトに変換する前に、文字列が 16 進文字列であることを定義することです。

今何をしているか = 2(1byte), b(1byte), 1(1byte), 1(1byte)...

しなければならないこと = 2b(1byte)、11(1byte)、02(1byte)...

4

2 に答える 2

36

16 進数をバイトに、バイトを 16 進数に変換します。

public static byte[] hexStringToByteArray(String s) {
                int len = s.length();
                byte[] data = new byte[len/2];

                for(int i = 0; i < len; i+=2){
                    data[i/2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16));
                }

                return data;
            }

final protected static char[] hexArray = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
public static String byteArrayToHexString(byte[] bytes) {
            char[] hexChars = new char[bytes.length*2];
            int v;

            for(int j=0; j < bytes.length; j++) {
                v = bytes[j] & 0xFF;
                hexChars[j*2] = hexArray[v>>>4];
                hexChars[j*2 + 1] = hexArray[v & 0x0F];
            }

            return new String(hexChars);
        }
于 2013-09-10T09:07:26.773 に答える