[心缘地方]同学录
首页 | 功能说明 | 站长通知 | 最近更新 | 编码查看转换 | 代码下载 | 常见问题及讨论 | 《深入解析ASP核心技术》 | 王小鸭自动发工资条VBA版
登录系统:用户名: 密码: 如果要讨论问题,请先注册。

[整理]Java将AB1234形式的16进制字符串转换为10进制数值,考虑字节序的影响.

上一篇:[备注]Java利用正则,一组数字两位一组,整体反转~~~
下一篇:[备忘]关于Java多线程的两个网址

添加日期:2011/6/13 15:32:52 快速返回   返回列表 阅读5048次


/**
 * 将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();
}

 

评论 COMMENTS
没有评论 No Comments.

添加评论 Add new comment.
昵称 Name:
评论内容 Comment:
验证码(不区分大小写)
Validation Code:
(not case sensitive)
看不清?点这里换一张!(Change it here!)
 
评论由管理员查看后才能显示。the comment will be showed after it is checked by admin.
CopyRight © 心缘地方 2005-2999. All Rights Reserved