转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/21458793
本篇博客主要介绍一下如何将16进制的字符串转化为long值,具体代码实现如下:
/**
*@Description:
*/
package cn.lulei.util;
public class Test {
/**
* @param md5L16
* @return
* @Date:2014-3-18
* @Author:lulei
* @Description: 将16位的md5转化为long值
*/
public static long parseMd5L16ToLong(String md5L16){
if (md5L16 == null) {
throw new NumberFormatException("null");
}
md5L16 = md5L16.toLowerCase();
byte[] bA = md5L16.getBytes();
long re = 0L;
for (int i = 0; i < bA.length; i++) {
//加下一位的字符时,先将前面字符计算的结果左移4位
re <<= 4;
//0-9数组
byte b = (byte) (bA[i] - 48);
//A-F字母
if (b > 9) {
b = (byte) (b - 39);
}
//非16进制的字符
if (b > 15 || b < 0) {
throw new NumberFormatException("For input string '" + md5L16);
}
re += b;
}
return re;
}
/**
* @param str16
* @return
* @Date:2014-3-18
* @Author:lulei
* @Description: 将16进制的字符串转化为long值
*/
public static long parseString16ToLong(String str16){
if (str16 == null) {
throw new NumberFormatException("null");
}
//先转化为小写
str16 = str16.toLowerCase();
//如果字符串以0x开头,去掉0x
str16 = str16.startsWith("0x") ? str16.substring(2) : str16;
if (str16.length() > 16) {
throw new NumberFormatException("For input string '" + str16 + "' is to long");
}
return parseMd5L16ToLong(str16);
}
public static void main(String[] args) {
System.out.println(parseString16ToLong("0x1fffff"));
System.out.println(Long.valueOf("7fffffffffff", 16));
}
}
本算法的缺陷主要是处理16进制的字符串的最大长度为16位(不包括开头的0x)。
本文详细介绍了如何使用Java将16进制的字符串转换成long数值,提供了具体的代码实现。
1911

被折叠的 条评论
为什么被折叠?



