这里我有一个字符串,我将这个字符串转换为长整型,然后将这个长整型值转换为字节。该字节数组长度为6。
final byte[] tagBytes = ByteBuffer.allocate(8).order(ByteOrder.LITTLE_ENDIAN)
.putLong(Long.parseLong("02201156116")).array();
System.arraycopy(tagBytes, 0, tag, 0, 6);
Log.d("TAG", "TAG in bytes "+Arrays.toString(tag));
这里我得到了这样的输出[52, 84, 49, -125, 0, 0]
现在我想像之前一样转换字符串中的输出字节“02201156116”
所以在这里我必须首先对 BIG_ENDIAN 中的字节进行排序,然后包装字节并从中获取长值。 但我很惊讶为什么它不起作用
ByteBuffer.wrap(tempDateBytes).order(ByteOrder.BIG_ENDIAN).getLong()
这个及其工作
ByteBuffer.wrap(tempDateBytes).order(ByteOrder.LITTLE_ENDIAN).getLong()
这个,我们必须应用 BIG_ENDIAN,因为当我们将 long 转换为字节时,我们使用了 LITTLE_ENDIAN。所以我认为我们必须在这里使用 BIG_ENDIAN。但它不适用于 BIG_ENDIAN,它适用于 LITTLE_ENDIAN。
此代码我用来将 [52, 84, 49, -125, 0, 0]
转换为 02201156116
long time,time1;
final byte[] tempDateBytes = new byte[8];
System.arraycopy(tagBytes, 0, tempDateBytes, 0, 6);
time1 = ByteBuffer.wrap(tempDateBytes).order(ByteOrder.BIG_ENDIAN).getLong();
time = ByteBuffer.wrap(tempDateBytes).order(ByteOrder.LITTLE_ENDIAN).getLong();
Log.d("TAG", "Orignal TAG "+time);
Log.d("TAG", "BAD TAG "+time1);
最佳答案
从简短
的角度考虑它。假设我们对值 258 进行编码:
258 = 256 + 2 = 0x0102
现在,如果我们将其放入数组中,我们必须决定将哪个字节放在索引 0 处。我们可以这样做
{ 0x01, 0x02 }
或
{ 0x02, 0x01 }
没有顺序本身比其他顺序更好,但关键点是记住我们使用的顺序,当我们想要解码数组并想要取回值 258 时。
这就是 LITTLE_ENDIAN 和 BIG_ENDIAN 的目的。在编码时,它告诉要使用的字节顺序。在解码时,它告诉我们编码时使用的字节顺序。
因此,为了不把事情搞砸,请务必在编码和解码时使用相同字节顺序。
关于java - java中如何将字节转换为长整型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14979380/