`
goodscript
  • 浏览: 72929 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

64进制编码转换

    博客分类:
  • java
阅读更多

由于项目需要把一个ID(数字)压缩成尽可能短字符串,在网上找来好久没有找到合适,

自己动手写一个。

有需要的可以参考一下,也作为自己的一些积累吧!

代码如下:

/**
 * 64进制和10进制的转换类
 * @author Administrator
 *
 */
public class compressEncodeing {
    final static char[] digits = {
    	'0' , '1' , '2' , '3' , '4' , '5' ,
    	'6' , '7' , '8' , '9' , 'a' , 'b' ,
    	'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
    	'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
    	'o' , 'p' , 'q' , 'r' , 's' , 't' ,
    	'u' , 'v' , 'w' , 'x' , 'y' , 'z' ,
    	'A' , 'B' , 'C' , 'D' , 'E' , 'F' ,
    	'G' , 'H' , 'I' , 'J' , 'K' , 'L' ,
    	'M' , 'N' , 'O' , 'P' , 'Q' , 'R' ,
    	'S' , 'T' , 'U' , 'V' , 'W' , 'X' ,
    	'Y' , 'Z' , '+' , '/'  ,
        };
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println(CompressNumber(999999999999999999L,6)); 
		System.out.println(UnCompressNumber(CompressNumber(999999999999999999L,6)));
	}
	/**
	 * 把10进制的数字转换成64进制
	 * @param number
	 * @param shift
	 * @return
	 */
    private static String CompressNumber(long number, int shift) {
    	char[] buf = new char[64];
    	int charPos = 64;
    	int radix = 1 << shift;
    	long mask = radix - 1;
    	do {
    	    buf[--charPos] = digits[(int)(number & mask)];
    	    number >>>= shift;
    	} while (number != 0);
    	return new String(buf, charPos, (64 - charPos));
       }
    /**
     * 把64进制的字符串转换成10进制
     * @param decompStr
     * @return
     */
    private static long UnCompressNumber(String decompStr)
    {
    	long result=0;
    	for (int i =  decompStr.length()-1; i >=0; i--) {
    		if(i==decompStr.length()-1)
    		{
    			result+=getCharIndexNum(decompStr.charAt(i));
    			continue;
    		}
    		for (int j = 0; j < digits.length; j++) {
    			if(decompStr.charAt(i)==digits[j])
        		{
    				result+=((long)j)<<6*(decompStr.length()-1-i);
        		}
			}
		}
    	return result;
    }   
    /**
     * 
     * @param ch
     * @return
     */
    private static long getCharIndexNum(char ch)
    {
    	int num=((int)ch);
    	if(num>=48&&num<=57)
    	{
    		return num-48;
    	}
    	else if(num>=97&&num<=122)
    	{
    		return num-87;
    	}else if(num>=65&&num<=90)
    	{
    		return num-29;
    	}else if(num==43)
    	{
    		return 62;
    	}
    	else if (num == 47)
    	{
    		return 63;
		}
    	return 0;
    }

}

 

分享到:
评论
2 楼 goodscript 2011-11-22  
huangtut 写道
反转的时候有问题啊, 输出是999999999999999936

不会啊
在我电脑输出的结果是:
TwJHeDo///
999999999999999999
1 楼 huangtut 2011-11-21  
反转的时候有问题啊, 输出是999999999999999936

相关推荐

    中文转换成十六进制编码

    十六进制编码是一种将字符转换为数字表示的方法,尤其在处理非ASCII字符集(如中文)时非常有用。本文将详细介绍如何将中文字符转换成十六进制编码,并通过一个简单的步骤进行演示。 中文字符集主要有GB2312、GBK、...

    字符二进制编码转换工具

    字符二进制编码转换工具是一种实用软件,它可以帮助用户方便地在字符和二进制编码之间进行转换。这个工具对于理解和处理不同字符编码系统,如ASCII、Unicode(UTF-8、UTF-16)等,非常有帮助。 字符编码转换的基本...

    16进制编码转换工具.zip

    标题 "16进制编码转换工具.zip" 暗示我们关注的是一个包含16进制编码转换功能的软件包。这种工具在信息技术领域极为重要,因为16进制(Hexadecimal)是一种常用于表示二进制数据的简便方式,尤其是在编程、网络通信...

    字符进制编码转换工具

    这里我们将深入探讨这些知识点,并结合提供的"字符进制编码转换工具"进行说明。 首先,让我们了解字符编码。在计算机中,所有的数据都是以二进制形式存储的,包括我们看到的文字。字符编码如ASCII(美国标准信息...

    【ASP.NET编程知识】Asp.Net中的字符串和HTML十进制编码转换实现代码.docx

    例如,在 KindEditor 图片上传的 ASP.NET 代码实例中,就需要使用字符串和十六进制编码转换来实现图片上传功能。此外,在 ASP.NET 中网站访问量统计方法代 码中,也需要使用字符串和十六进制编码转换来实现统计功能...

    十进制与36进制、64进制互转C语言程序

    总的来说,理解和实现进制转换是学习计算机科学的基础,它有助于深入理解二进制、十六进制等不同进制在计算机内部的工作原理,同时也为编码、解码、加密等高级应用打下基础。通过分析和实践`IntConv`中的代码,你...

    进制编码转换器

    进制编码转换器

    二进制 十进制 十六进制 编码转换 源码

    `calc`可能是一个用于计算这些转换的程序或者工具的名称,它可以是命令行工具,也可以是源代码文件,用于执行进制或编码转换的计算。 在深入学习这个主题时,你还需要理解二进制补码的概念,这对于理解负数在计算机...

    编码进制转换工具

    此外,这些工具可能还支持其他进制(如六进制或二十二进制)的转换,以及特定的编码转换,如ASCII到Unicode的转换。 在实际应用中,进制转换工具对程序员和计算机科学家非常有用。例如,当解析二进制文件、调试程序...

    浮点数与十进制数转换工具

    浮点数与十进制数转换是计算机科学中常见的数据处理任务,特别是在数值计算、编程以及数据解析等领域。本文将详细探讨浮点数与十进制数之间的转换原理及其在实际应用中的重要性。 首先,浮点数是一种表示实数的方式...

    汉字十六进制转换工具

    将汉字转换为十六进制编码(UltraEdit替换资源可以用到),经测试非常好用,分享给大家~~

    曼彻斯特编码解码器V1.3(16进制2进制转换).rar

    本资源提供的是一款名为“曼彻斯特编码解码器V1.3”的软件,它包含了对不同曼彻斯特编码方式的支持,并且能够进行16进制与二进制之间的转换。 首先,我们要理解曼彻斯特编码的基本原理。在曼彻斯特编码中,每一位的...

    2进制与base64编码转换C代码

    需要一个二进制与BASE64相互转换的函数,从网上找...示例中提供二进制与16进制字符串转换函数ConvertHexStrToBin与ConvertBinToHexStr,二进制与BASE64编码转换函数Base64Encode与Base64Decode,在VC6下编译通过可用。

    Hex十六进制/Base64编码转换器

    "Hex十六进制/Base64编码转换器"工具提供了一种方便的方式来转换这些编码形式。用户可以输入字符串文本,然后选择进行十六进制或Base64编码,反之亦然。这对于开发者来说尤其实用,因为他们经常需要在不同编码间切换...

    34-36进制到10进制的转换 !

    在IT行业中,进制转换是一项基础且重要的技能,特别是在数据处理和编码系统中。这里我们主要探讨的是34进制和36进制到10进制的转换,这在条形码应用中可能遇到的问题。 条形码是一种广泛应用于商品、物流、文档管理...

    十六进制与时间转换

    在分析包含汉字的数据时,这样的工具尤其有用,因为汉字在计算机内部是通过特定的编码(如GB2312、GBK、UTF-8等)以二进制形式存储的,这些二进制数据可以通过十六进制转换来查看和理解。 "安装说明.txt"可能提供了...

    汉字中文十六进制显示转换

    在IT领域,尤其是在编程和数据处理中,有时候我们需要将汉字字符转换为十六进制表示,或者反过来,将十六进制编码还原为汉字。这在处理串口通信、文本编码、网络传输等场景时尤其常见。本文将深入探讨“汉字中文十六...

    西电-通信原理大作业-对输入的二进制序列编码转换为:AMI码对输入的二进制序列编码转换为:HDB3码

    对输入的二进制序列编码转换为:HDB3码

    进制转换器-进制转换-编码转换

    总之,进制转换器v1.0作为一款便捷的实用工具,为用户提供了在各种进制之间轻松转换的平台,同时也涵盖了编码转换的基本需求。无论是学习计算机科学的基础知识,还是在实际工作中处理数据,它都是一个非常有用的助手...

Global site tag (gtag.js) - Google Analytics