【发布时间】:2018-08-09 13:18:14
【问题描述】:
我开始使用字节和十六进制来尝试更轻松地存储一些数据。这就是我目前正在做的事情:
byte[] data = new byte[] {0x20, 0x40};
long cosmetics = 0;
for(byte d : data) {
cosmetics = cosmetics | d;
System.out.println(d + ": " + cosmetics);
}
String hex = Long.toHexString(cosmetics);
System.out.println("hex: 0x" + hex);
System.out.println("from hex: " + Long.decode("0x"+hex));
byte[] bytes = longToBytes(cosmetics);
String s = "";
for(byte b : bytes)
s += b+", ";
System.out.println("bytes: " + s);
这一切都很好,hex: 0x60 和 from hex = 96,就像它应该的那样 (afaik)。
但是,当我尝试使用 longToBytes(cosmetics) 将 96 转换回字节数组时:
public static byte[] longToBytes(long x) {
ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
buffer.putLong(x);
return buffer.array();
}
它不返回我最初使用的数组,它给出:0, 0, 0, 0, 0, 0, 0, 96
但我想要它给我的,是我最初使用的数组:
byte[] data = new byte[] {0x20, 0x40};
【问题讨论】:
-
你怎么称呼
longToBytes(long x),你得到的结果是逻辑我不明白你到底是什么!! -
@YCF_L 更新了帖子,因为我猜它还不够清楚。