这里我有一个字符串,我将这个字符串转换为long,并将此long值转换为字节。这个字节数组长度为6如何在java中将字节转换为long
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"
所以在这里我要第1次输出字节在BIG_ENDIAN中,然后包装Bytes并从中获得较长的值。 但在这里,我觉得很奇怪,为什么它不是为
ByteBuffer.wrap(tempDateBytes).order(ByteOrder.BIG_ENDIAN).getLong()
这和它的工作连续工作
ByteBuffer.wrap(tempDateBytes).order(ByteOrder.LITTLE_ENDIAN).getLong()
这一点,通过我们的时候,我们将long转换成我们使用LITTLE_ENDIAN字节申请BIG_ENDIAN监守d方式。所以我认为我们必须在这里使用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);
我读的问题是否正确?你不是已经解决了你的问题吗? – jlordo 2013-02-20 12:05:55
如果你只给它6个字节(因为'long'是8个字节),'ByteBuffer.getLong'不会抛出异常吗? – 2013-02-20 12:08:53
@IanRoberts:'byte []'的大小为8.他只是复制6个字节,但这并不重要。 – jlordo 2013-02-20 12:12:49