您的位置:首页 > 编程语言 > C语言/C++

C语言的strtoul,stratal方法的java实现

2016-07-20 23:02 525 查看
package com.strtol;

import java.util.Arrays;

/**
* 类    名:StringUtil
* 类 描 述:
* 作    者:Fabuler
* 日    期:2016年7月20日-下午9:31:17
*/
public class StringUtil {
/**
* 描述:此方法只返回非负数
* 作者:Fabuler
* 日期:2016年7月20日 - 下午10:35:28
* @param cp
* @param base
* @return
*/
private static long strtoul(char[] cp,int base){
long result=0,value;
int i=0;
if(base==0){
base=10;
if(cp[i]=='0'){
base=8;
i++;
if(Character.toLowerCase(cp[i])=='x'&&isxdigit(cp[1])){
i++;
base=16;
}
}
}else if(base==16){
if(cp[0]=='0'&&Character.toLowerCase(cp[1])=='x')
i+=2;
}
while(isxdigit(cp[i])&&(value = isdigit(cp[i]) ? cp[i]-'0' : Character.toLowerCase(cp[i])-'a'+10) < base){
result=result*base+value;
i++;
}
return result;
}
/**
* 描述:此会返回有符号数
* 作者:Fabuler
* 日期:2016年7月20日 - 下午10:36:08
* @param cp
* @param base
* @return
*/
private static long strtol(char[]cp,int base){
if(cp[0]=='-'){
return -strtoul(subChars(cp, 1),base);
}
return strtoul(cp, base);
}
private static boolean isxdigit(char c){
return ('0' <= c && c <= '9')||('a' <= c && c <= 'f')||('A' <= c && c <= 'F');
}
private static boolean isdigit(char c){
return '0' <= c && c <= '9';
}
/**
* 描述:char数组切分
* 作者:Fabuler
* 日期:2016年7月20日 - 下午10:37:59
* @param cp
* @param indexs
* @return
*/
private static char[] subChars(char[]cp,int...indexs){
if(indexs.length==1){
return Arrays.copyOfRange(cp, indexs[0], cp.length);
}else if(indexs.length>1){
return Arrays.copyOfRange(cp, indexs[0], indexs[0]+indexs[1]);
}
return cp;
}
public static long strtol(String str,int base){
return strtol((str+"\0").toCharArray(),base);
}
public static long strtoul(String str,int base){
return strtoul((str+"\0").toCharArray(),base);
}
public static void main(String[] args) {
String md5="0ca175b9c0f726a831d895e269332461";
//		System.out.println(strtol(subChars(md5.toCharArray(),0,4), 16));
//		System.out.println(strtol(subChars(md5.toCharArray(),3,4), 16));
System.out.println(strtol(md5.substring(0, 4),16));
System.out.println(strtol(md5.substring(3, 3+4),16));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 strtoul stratal