web-dev-qa-db-ja.com

Javaの16進文字列をバイト値に変換する方法

文字列配列があります。バイト配列に変換したいです。 Javaプログラムを使用します。例えば:

String str[] = {"aa", "55"};

に変換:

byte new[] = {(byte)0xaa, (byte)0x55};

私に何ができる?

22
brian

サンプルを見ると、文字列配列は実際にはバイトの16進表現の配列であるということですね。

はいの場合、各文字列項目に対して次のことを行います。

  1. 文字列が2文字のみで構成されていることを確認します
  2. これらの文字は '0' .. '9'または 'a' .. 'f'間隔にあります(大文字と小文字も考慮してください)
  3. 各文字を対応する数値に変換し、「0」または「a」のコード値を減算します
  4. バイト値を作成します。最初の文字は上位ビットで、2番目の文字は下位ビットです。例えば。

    int byteVal = (firstCharNumber << 4) | secondCharNumber;
    
15
Wizart
String str = "Your string";

byte[] array = str.getBytes();
54
Lion

文字列をバイト配列に変換します。

byte[] theByteArray = stringToConvert.getBytes();

文字列をバイトに変換:

 String str = "aa";

 byte b = Byte.valueOf(str);
11
Paresh Mayani

これに似たものを試すことができます:

_String s = "65";

byte value = Byte.valueOf(s);
_

String配列内のすべての要素に対してByte.ValueOf()メソッドを使用して、それらをByte値に変換します。

9

16進数文字列から1バイトへの変換に対する答えがなかったため、ここに私のものがあります。

_private static byte hexStringToByte(String data) {
    return (byte) ((Character.digit(data.charAt(0), 16) << 4)
                  | Character.digit(data.charAt(1), 16));
}
_

サンプル使用法:

_hexStringToByte("aa"); // 170
hexStringToByte("ff"); // 255
hexStringToByte("10"); // 16
_

または、Integer.parseInt(String number, int radix) imoを試すこともできます。これは他の方法よりも優れています。

_// first parameter is a number represented in string
// second is the radix or the base number system to be use
Integer.parseInt("de", 16); // 222
Integer.parseInt("ad", 16); // 173
Integer.parseInt("c9", 16); // 201
_
3
mr5

長い道のり:)。長いforステートメントを削除するメソッドを認識していません

ArrayList<Byte> bList = new ArrayList<Byte>();
for(String ss : str) {
    byte[] bArr = ss.getBytes();
    for(Byte b : bArr) {
        bList.add(b);
    }
}
//if you still need an array
byte[] bArr = new byte[bList.size()];
for(int i=0; i<bList.size(); i++) {
    bArr[i] = bList.get(i);
}
3
suat
String source = "testString";
byte[] byteArray = source.getBytes(encoding); 

Foreachを使用して、配列内のすべての文字列で同じ操作を実行できます。

2
Sandeep Pathak

最も簡単な方法(Apache Common Codecを使用):

byte[] bytes = Hex.decodeHex(str.toCharArray());
0
ANTARA

ここで、文字列をbyte []に​​変換する場合、ユーティリティコードがあります。

    String[] str = result.replaceAll("\\[", "").replaceAll("\\]","").split(", ");
    byte[] dataCopy = new byte[str.length] ;
    int i=0;
    for(String s:str ) {
        dataCopy[i]=Byte.valueOf(s);
        i++;
    }
    return dataCopy;
0
user3396256
String str[] = {"aa", "55"};

byte b[] = new byte[str.length];

for (int i = 0; i < str.length; i++) {
    b[i] = (byte) Integer.parseInt(str[i], 16);
}

Integer.parseInt(string、radix)は、文字列を整数に変換します。基数パラメーターは数値システムを指定します。

文字列が16進数を表す場合は、基数16を使用します。
文字列が2進数を表す場合は、基数2を使用します。
文字列が10進数を表す場合は、10の基数を使用します(または基数パラメーターを省略します)。

詳細については、Java docs: https://docs.Oracle.com/javase/7/docs/api/Java/lang/Integer.html#parseInt(Java .lang.String、%20int)

0
h3k