本文共 1054 字,大约阅读时间需要 3 分钟。
/**
* 将AB1234形式的16进制字符串转换为10进制数值,考虑字节序的影响.
*
* @param hexStr
* "AB1234"形式的16进制字符串
* @param byteOrder
* 字节序
* @return 10进制数值
*/
public static long ConvertHexStrToDec(String hexStr, ByteOrder byteOrder) {
// 如果是大端字节序,直接解析返回(Java默认使用大端字节序)
if (byteOrder.equals(ByteOrder.BIG_ENDIAN)) {
return Long.parseLong(hexStr, 16);
}
// 先按大端字节序解析16进制字符串。
Long wrongNumber = Long.parseLong(hexStr, 16);
// 将数值写入ByteBuffer,得到字节流
ByteBuffer buffer = ByteBuffer.allocate(Long.SIZE / Byte.SIZE);
buffer.order(ByteOrder.BIG_ENDIAN);
buffer.putLong(wrongNumber);
byte[] array = buffer.array();
// 得到第一个值不为0的数组下标
int beginIndex = 0;
for (int i = 0; i < array.length; i++) {
if (array[i] != 0) {
beginIndex = i;
break;
}
}
// 剩余字节,反序写入另一个数组中,靠尾端写入
byte[] newArray = new byte[array.length];
int nextPositon = newArray.length - 1;
for (int i = beginIndex; i < array.length; i++) {
newArray[nextPositon] = array[i];
nextPositon--;
}
// 复制回原数组(ByteBuffer直接受影响)
System.arraycopy(newArray, 0, array, 0, newArray.length);
// 按Long型读出。
buffer.rewind();
return buffer.getLong();
}
转载地址:https://blog.csdn.net/weixin_32306771/article/details/115811780 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!