java 将 UUID 转换为十六进制字符串,反之亦然
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/7628362/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Convert UUID to hex string and vice versa
提问by Oliver
A UUID in the form of "b2f0da40ec2c11e00000242d50cf1fbf" has been transformed (see the following code segment) into a hex string as 6232663064613430656332633131653030303030323432643530636631666266. I want to code a reverse routine and get it back to the original format as in "b2f0...", but had a hard time to do so, any help?
一个UUID在“b2f0da40ec2c11e00000242d50cf1fbf”已转化的形式(参见下面的代码段),成为6232663064613430656332633131653030303030323432643530636631666266.我想代码反向例程的十六进制字符串,并让它回到原来的格式,如“b2f0 ......”但很难做到这一点,有什么帮助吗?
byte[] bytes = uuid.getBytes("UTF-8");
StringBuilder hex = new StringBuilder(bytes.length* 2);
Formatter fmt = new Formatter(hex);
for (byte b : bytes)
fmt.format("%x", b);
回答by palacsint
final String input = "6232663064613430656332633131653030303030323432643530636631666266";
System.out.println("input: " + input);
final StringBuilder result = new StringBuilder();
for (int i = 0; i < input.length(); i += 2) {
final String code = input.substring(i, i + 2);
final int code2 = Integer.parseInt(code, 16);
result.append((char)code2);
}
System.out.println("result: " + result);
It prints:
它打印:
input: 6232663064613430656332633131653030303030323432643530636631666266
result: b2f0da40ec2c11e00000242d50cf1fbf
回答by c00kiemon5ter
Here you go:
干得好:
import java.util.Formatter;
class Test {
public static void main(String[] args) {
String uuid = "b2f0da40ec2c11e00000242d50cf1fbf";
byte[] bytes = uuid.getBytes();
StringBuilder hex = new StringBuilder(bytes.length * 2);
Formatter fmt = new Formatter(hex);
for (byte b : bytes) {
fmt.format("%x", b);
}
System.out.println(hex);
/******** reverse the process *******/
/**
* group the bytes in couples
* convert them to integers (base16)
* and store them as bytes
*/
for (int i = 0; i < bytes.length; i++) {
bytes[i] = (byte) Integer.parseInt(hex.substring(2 * i, 2 * i + 2), 16);
}
/**
* build a string from the bytes
*/
String original = new String(bytes);
System.out.println(original);
}
}