如何把GUID放入一个16位的二进制上。又如何读取一个16位的二进制回GUID

ericllzh 2011-06-18 10:39:38
我上网找了些生成GUID的类,最后会变成一个字符串。
那么怎么把这字符串转为存入到16位的二进制上呢?
...全文
275 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
SLL324 2011-07-18
  • 打赏
  • 举报
回复
回复看答案
chenchenyangll 2011-06-19
  • 打赏
  • 举报
回复
顶LS~~~~~
chenchenyangll 2011-06-18
  • 打赏
  • 举报
回复
给个例子
  • 打赏
  • 举报
回复
import java.util.UUID;

public class Test3 {

private final static char[] HEX = "0123456789abcdef".toCharArray();

public static void main(String[] args) {
String uuid = "2c4dbc35-7985-42b1-a391-019e3acfea05";
byte[] bys = uuid2Bytes(uuid);
// 验证
System.out.println(hex(bys).equals(uuid.replace("-", "")));
}

public static byte[] uuid2Bytes(String uuid) {
if(uuid == null) {
throw new NullPointerException("uuid is null");
}
UUID uid = UUID.fromString(uuid);
long lsb = uid.getLeastSignificantBits();
long msg = uid.getMostSignificantBits();
byte[] bys = new byte[16];
for(int i = 0, j = 8; i < 8; i++, j++) {
bys[i] = (byte)((msg >>> ((7 - i) << 3)) & 0xff);
bys[j] = (byte)((lsb >>> ((7 - i) << 3)) & 0xff);
}
return bys;
}

public static String hex(byte[] bytes) {
if(bytes == null) {
return null;
}
if(bytes.length == 0) {
return "";
}
char[] chs = new char[bytes.length << 1];
for(int i = 0, k = 0; i < bytes.length; i++) {
chs[k++] = HEX[(bytes[i] & 0xf0) >> 4];
chs[k++] = HEX[(bytes[i] & 0xf)];
}
return new String(chs);
}
}
chenchenyangll 2011-06-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bao110908 的回复:]

16 位的二进制上?16 位的二进制才 65536 种可能性,怎么能表示 UUID 或者 GUID 呢?

要知道 UUID 或者 GUID 拥有 128 位二进制值。
[/Quote]

LZ说的是16字节啦~~ = =
  • 打赏
  • 举报
回复
16 位的二进制上?16 位的二进制才 65536 种可能性,怎么能表示 UUID 或者 GUID 呢?

要知道 UUID 或者 GUID 拥有 128 位二进制值。
chenchenyangll 2011-06-18
  • 打赏
  • 举报
回复
这字符串一共32个字符

每一个字符理解为16进制

则每一个字符可以转换为4 bit

每两个字符可以拼成 8 bit = 1 字节

总计 32 / 2 = 16 字节

这个应该不难吧 = =

可以循环两位两位截取,将它从16进制转为10进制存在1个字节中,搞定
ericllzh 2011-06-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chenchenyangll 的回复:]

给个例子
[/Quote]
就如把一个GUID 2c4dbc35-7985-42b1-a391-019e3acfea05的存放到一个byte[16]的字节中。
ericllzh 2011-06-18
  • 打赏
  • 举报
回复
就如把一个GUID 2c4dbc35-7985-42b1-a391-019e3acfea05的存放到一个byte[16]的字节中。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧