如何将价值转换回"%02x"在Java?

时间:2014-08-08 14:53:08

标签: java type-conversion uuid primitive-types

我有一个以已知方式转换为字符串的字节数组。

public String getValueString(byte[] data) {
    StringBuilder result = "";
    for(int i = 0; i < data.length; i++) {
        result.append(String.format("%02X", data[i]));
    }
    return result.toString;
}

我正在寻找将String转换为字节数组的方法。

实际上,字节数组是UUID,但它以奇怪的方式和方法表示

UUID.nameUUIDFromBytes(byte[] data)

在我的情况下不起作用。

2 个答案:

答案 0 :(得分:3)

这是非常简单易用的尝试:

byte[] data = string.getBytes();
byte[] data = string.getBytes(Charset.forName("UTF-8"));

将字节数组转换为UIID:

ByteBuffer bb = ByteBuffer.wrap(inputByteArray);   
long firstLong = bb.getLong();   
long secondLong = bb.getLong();  

return new UUID(firstLong, secondLong);

怎么样:

  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));
    }

data是你的字节数组。

答案 1 :(得分:1)

这是一种将十六进制数转换回字节的方法:

String str = "4FDD3A";
byte[] bytes = new byte[str.length()/2];
for (int i = 0; i < str.length(); ++i) {
    if ((i+1)*2 <= str.length()) {
        bytes[i] = (byte) Integer.parseInt(str.substring(i*2, (i+1)*2), 16);
    }
}
for (byte b: bytes) {
    System.out.format("%02x\n", b);
}