1

特定の文字列をbyte[]に変換しようとしています。

文字列は次のようになります:55 55 F5 FF FF

これが私が書いた方法です。誰かが何が悪いのか、もっと良い解決策があるのか​​教えてくれることを願っています。

public static byte[] stringToByte(String text) {
    //byte[] length ==> String (length+1)/3
    byte raw[] = new byte[(text.length() + 1) / 3];
    int j = 0;
    for (int i = 0; i < text.length(); i += 2) {
        String h = "";
        h += text.charAt(i);
        h += text.charAt(i + 1);
        i++;
        raw[j] = Byte.valueOf(h);
        j++;
    }
    return raw;
}

問題は、F5になるまで機能することです。

byte[]に使用するのと同じ値が必要です

byte raw[] = {(byte) 0x55, (byte) 0x55, (byte) 0x5F,(byte) 0xFF,(byte) 0xFF};
4

4 に答える 4

2

これはうまくいきます:

public static byte[] stringToByte(String text) {
  final String[] split = text.split("\\s+");
  final byte[] result = new byte[split.length];
  int i = 0;
  for (String b : split) result[i++] = (byte)Integer.parseInt(b, 16);
  return result;
}

なんで?byteは符号付きの数量であり、その範囲外のものを に直接解析することはできませんbyte。しかし、 を解析してintから への縮小変換を使用するとbyte、結果が得られます。

于 2012-05-09T21:20:40.130 に答える
0

StringTokenizer各トークンに使用することもできます。

public static byte[] stringToByte(String text) {
    StringTokenizer st = new StringTokenizer(text);
    byte raw[] = new byte[st.countTokens()];
    for (int i = 0; i < raw.length; i++) {
        raw[i] = (byte) Integer.parseInt(st.nextToken(), 16);
    }
    return raw;
}
于 2012-05-09T21:43:15.240 に答える
0

スペースで区切られた文字列をループして Byte オブジェクトを解析しているようです。その場合、次のようなものを使用することをお勧めします。

         String text = "";
         String[] strArr = text.split(" ");
         for (String str: strArr)
         {
             //convert string to byte here
         }
于 2012-05-09T21:18:59.190 に答える
0
byte[] raw = new byte[text.length() >> 1];
for(int i=0; i<text.length();i+=2){
    raw[i >> 1] = Integer.parseInt(text.substring(i, i+2),16);
}

Byte は符号なしバイトではないため、Integer.parseInt()代わりに使用しました。Byte.parseByte()でやってみましたString text = "55555FFF";

于 2012-05-09T21:24:50.933 に答える