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

这是一个Java类`StringUtil`,实现了类似C语言中的`strtoul`和`strtol`函数,用于将字符串转换为长整型数值。类中包括了处理不同基数的转换,并提供了检查字符是否为十六进制数字的方法。`main`方法展示了如何使用这些函数解析十六进制字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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));
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值