有一个问题,很像这篇文章:How to read a .NET Guid into a Java UUID。
除此之外,我从远程 svc 得到一个格式如下的十六进制 str:ABCDEFGH-IJKL-MNOP-QRST-123456
。
我需要匹配 GUID.ToByteArray() 生成的 .net 字节数组 GH-EF-CD-AB-KL-IJ-OP-MN- QR- ST-12- 34-56
在 Java 中用于哈希目的。
我有点不知道如何解析它。我是否切断了 QRST-123456
部分,也许在另一部分使用 Commons IO EndianUtils 之类的东西,然后将 2 个数组也拼接在一起?似乎太复杂了。
我可以重新排列字符串,但我不应该做任何这些。谷歌先生也不想帮助我..
顺便说一句,Little Endian 领域保持最后 6 个字符不变的逻辑是什么?
是的,仅供引用,这是我所做的{很抱歉“回答”,但在评论中无法正确格式化它}:
String s = "3C0EA2F3-B3A0-8FB0-23F0-9F36DEAA3F7E";
String[] splitz = s.split("-");
String rebuilt = "";
for (int i = 0; i < 3; i++) {
// Split into 2 char chunks. '..' = nbr of chars in chunks
String[] parts = splitz[i].split("(?<=\\G..)");
for (int k = parts.length -1; k >=0; k--) {
rebuilt += parts[k];
}
}
rebuilt += splitz[3]+splitz[4];
我知道,这很 hacky,但它可以用于测试。
最佳答案
将它变成一个byte[]并跳过前3个字节:
package guid;
import java.util.Arrays;
public class GuidConvert {
static byte[] convertUuidToBytes(String guid) {
String hexdigits = guid.replaceAll("-", "");
byte[] bytes = new byte[hexdigits.length()/2];
for (int i = 0; i < bytes.length; i++) {
int x = Integer.parseInt(hexdigits.substring(i*2, (i+1)*2), 16);
bytes[i] = (byte) x;
}
return bytes;
}
static String bytesToHexString(byte[] bytes) {
StringBuilder buf = new StringBuilder();
for (byte b : bytes) {
int i = b >= 0 ? b : (int) b + 256;
buf.append(Integer.toHexString(i / 16));
buf.append(Integer.toHexString(i % 16));
}
return buf.toString();
}
public static void main(String[] args) {
String guid = "3C0EA2F3-B3A0-8FB0-23F0-9F36DEAA3F7E";
byte[] bytes = convertUuidToBytes(guid);
System.err.println("GUID = "+ guid);
System.err.println("bytes = "+ bytesToHexString(bytes));
byte[] tail = Arrays.copyOfRange(bytes, 3, bytes.length);
System.err.println("tail = "+ bytesToHexString(tail));
}
}
关于c# - Dotnet 十六进制字符串到 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5905485/