如何在Java中将十六进制字符串转换为字节值

时间:2011-12-28 06:52:09

标签: java hex byte

我有一个String数组。 我想将其转换为字节数组。 我使用Java程序。 例如:

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

转换为:

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

我该怎么办?

10 个答案:

答案 0 :(得分:54)

String str = "Your string";

byte[] array = str.getBytes();

答案 1 :(得分:15)

查看示例我猜你的意思是字符串数组实际上是一个字节的HEX表示数组,不是吗?

如果是,那么对于每个字符串项,我将执行以下操作:

  1. 检查字符串是否只包含2个字符
  2. 这些字符位于'0'..'9'或'a'..'f'区间(考虑到他们的情况) ())
  3. 将每个字符转换为相应的数字,减去代码值“0”或“a”
  4. 构建一个字节值,其中第一个char是较高位,第二个char是较低位。 E.g。

    int byteVal = (firstCharNumber << 4) | secondCharNumber;
    

答案 2 :(得分:11)

将字符串转换为字节数组:

byte[] theByteArray = stringToConvert.getBytes();

将字符串转换为字节:

 String str = "aa";

 byte b = Byte.valueOf(str);

答案 3 :(得分:9)

你可以尝试类似的东西:

String s = "65";

byte value = Byte.valueOf(s);

对String数组中的所有元素使用Byte.ValueOf()方法将它们转换为字节值。

答案 4 :(得分:3)

还有很长的路要走:)我不知道摆脱长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);
}

答案 5 :(得分:3)

由于十六进制字符串无法回答单字节转换,所以这是我的:

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

答案 6 :(得分:2)

String source = "testString";
byte[] byteArray = source.getBytes(encoding); 

您可以预先对数组中的所有字符串执行相同的操作。

答案 7 :(得分:0)

最简单的方法(使用Apache Common Codec):

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

答案 8 :(得分:0)

{{1}}

Integer.parseInt(string,radix)将字符串转换为整数,基数参数指定数字系统。

如果字符串代表十六进制数,则使用16的基数 如果字符串代表二进制数,则使用2的基数 如果字符串表示十进制数,则使用10的基数(或省略基数参数)。

有关详细信息,请查看Java文档:https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String,%20int)

答案 9 :(得分:0)

在这里,如果要将字符串转换为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;