将Intger转换为String类型的16进制的表示

原创 2013年12月03日 17:12:41
public class Test {

	final static char[] digitals = {
		'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'
	};
	
	/**
	 * Convert the integer to an unsigned number.
	 *  
	 * @param i
	 * @param shift
	 * @return
	 */
	private static String toUnsignedString(int i, int shift) {
		char[] buf = new char[32];
		int charPos = 32;
		int radix = 1 << shift;
		int mask = radix - 1;
		do {
			buf[--charPos] = digitals[i & mask];
			i = i >>> shift;
		} while(i != 0);
		return new String(buf, charPos, (32 - charPos));
	}
	
	public static void main(String[] args) {
		System.out.println(Test.toUnsignedString(1024, 4));
	}
}

Integer的toHexString实现方法,恩,写的很好,学习学习。

下面是将byte数组转换为HexString的方法。

 

需要注意的:buf[2*i] = digitals.values()[(b[i] & 0xff) >>> shift].getC();

要&0xff,因为如果对char、byte或者short类型的数值进行移位处理,那么在移位进行之前,它们会被转换为int类型,并且得到的结果也是一个int类型的值。

如果byte数值超过2^7,即128,转换为int时就会在前面加1。

要加(),因为>>>操作符的优先级高于&。

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class Util {
	enum digitals {
		ZERO('0'), ONE('1'), TWO('2'), THREE('3'), FOUR('4'), FIVE('5'),
		SIX('6'), SEVEN('7'), EIGHT('8'), NINE('9'), A('A'), B('B'), 
		C('C'), D('D'), E('E'), F('F'), G('G'), H('H'),
		I('I'), J('J'), K('K'), L('L'), M('M'), N('N'),
		O('O'), P('P'), Q('Q'), R('R'), S('S'), T('T'),
		U('U'), V('V'), W('W'), X('X'), Y('Y'), Z('Z');

		private char c;

		public char getC() {
			return c;
		}

		public void setC(char c) {
			this.c = c;
		}

		private digitals(char c) {
			this.c = c;
		}
	}
	
	/**
	 * Convert the byte array to string
	 * @param b
	 * @param shift
	 * @return
	 */
	public static String byteArrayToString(byte[] b, int shift) {
		int len = b.length;
		char[] buf = new char[2 * len];
		int radix = 1 << shift;
		int mask = radix - 1;
		for(int i = 0; i < len; i++) {
			buf[2*i] = digitals.values()[(b[i] & 0xff) >>> shift].getC();
			buf[2*i + 1] = digitals.values()[b[i] & mask].getC();
		}
		return new String(buf);
	}
	
	public static void main(String[] args) throws IOException {
		InputStream is = new FileInputStream("d://t");
		byte[] b= new byte[16];
		is.read(b);
		System.out.println(Util.byteArrayToString(b, 4));
	}

}

 参考:java操作符优先级

C++将byte转换为string(16进制)

实际上c++中byte就是unsigned char(无符号字符类型)。这里补充说明char的区间范围是(-128,127),但unsigned char的区间并非就是char的区间范围,而是(0,2...

JAVA String--16进制 转换

有时候在传值的时候  如果有中文 极有可能出现乱码 并且直接传中文是不专业的 一般都是转换后再传 源码贴  直接用 import java.io.ByteArrayOutputStream; p...

Java的String/byte[]/16进制相互转换

源代码下载地址: http://www.zuidaima.com/share/1550463378410496.htm Java 字符串转 16 进制工具类 Hex.java 实现 16进制 0...

Java 数据类型转换——byte[]/16进制/字符串互转

Java 数据类型转换——byte[]/16进制/字符串互转简介最近在做TCP通信,报文是以16进制数组的形式进行接收和发送的,其中在解析和组装报文的过程中就用到了各种数据类型的转换,在这里主要是总结...

DWORD类型与16进制字符串之间的相互转换

MFC 中输入32位地址和数据的Edit控件关联的变量为DWORD m_Addr,m_Data, 在控件中输入类似“0x4F0C”的地址或数据时,直接利用UpdateData(TRUE)不能获得DW...
  • ljh0302
  • ljh0302
  • 2015年08月17日 15:13
  • 1430

Problem D: 编写函数:String to Integer (IV) (Append Code) && 2/8/16进制到10进制的转换

Problem D: 编写函数:String to Integer (IV) (Append Code) Time Limit: 1 Sec  Memory Limit: 2 MB Submit:...

RGB及ARGB中16进制的表示与转换方法

原文地址:RGB及ARGB中16进制的表示与转换方法   Flash 中的颜色 在 Flash 中,颜色就是一串特殊的数字,一个颜色值可以是0到16,777,215中的任意数值,这就是24位(b...
  • hxcttt
  • hxcttt
  • 2013年01月29日 12:28
  • 786

计算机数据类型16进制值转换器

  • 2011年01月19日 16:43
  • 209KB
  • 下载

string char* 16进制数字转化 unsigned char* 转化 字符串拼接

项目中用到了16进制数字的转化 , 但是输出的是通过sha1加密,字符是两两转化为16进制数,要求是将其连接起来发送成一个字符串。 首先 要用到string时需要加载相关的头文件 #inc...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:将Intger转换为String类型的16进制的表示
举报原因:
原因补充:

(最多只允许输入30个字)