Java 十进制 转 二进制、八进制、十六进制

JDK中已经帮我们实现了十进制 转 二进制、八进制、十六进制的功能,使用Integer.toBinaryString(x)、Integer.toOctalString(x)、Integer.toHexString(x) 即可将x转换为对应的二进制、八进制、十六进制形式。我们也可以通过位移运算来实现求二进制、八进制、十六进制的功能。


示例代码

@Test
	public void test02(){
		//使用JDK实现
		int x = -99;
		
		System.out.println(x+"="+Integer.toBinaryString(x));
		System.out.println(x+"="+Integer.toOctalString(x));
		System.out.println(x+"="+Integer.toHexString(x));
		
	}
	
	@Test
	public void test01(){
		
		int x = -99;
		
		System.out.println(x+"="+toBin(x));
		System.out.println(x+"="+toBa(x));
		System.out.println(x+"="+toHex(x));
		
	}
	/*
	 * 十进制-->二进制
	 */
	public String toBin(int num) {
		return trans(num, 1, 1);
	}

	/*
	 * 十进制-->八进制
	 */
	public String toBa(int num) {
		return trans(num, 7, 3);
	}

	/*
	 * 十进制-->十六进制
	 */
	public String toHex(int num) {
		return trans(num, 15, 4);
	}

	public String trans(int num, int base, int offset) {

		if (num == 0) {
			return null;
		}
		char[] chs = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
				'B', 'C', 'D', 'E', 'F' };
		char[] arr = new char[32];

		int pos = arr.length;

		while (num != 0) {
			int temp = num & base;
			arr[--pos] = chs[temp];
			num = num >>> offset;
		}

		StringBuilder sb = new StringBuilder();
		for (int x = pos; x < arr.length; x++) {
			sb.append(arr[x]);
		}

		return sb.toString();
	}


最近在做项目时需要将一个byte数组 按6bit一组进行重新组合,研究了一下实现了这个功能

实现代码

@org.junit.Test
	public void test02(){
		byte b = 65;
//		byte b = -86;
		
		String str = getAllBinaryBits(b);
		System.out.println(str);
	}
	
	/**
	 * 将每一个字节转换为8位二进制字符串形式
	 * @param b
	 * @return
	 */
	private String getAllBinaryBits(byte b) {
		
		StringBuffer sb = new StringBuffer();
		
		sb.append((b & 128)==0?0:(b & 128)>>7);
		sb.append((b & 64)==0?0:(b & 64)>>6);
		sb.append((b & 32)==0?0:(b & 32)>>5);
		sb.append((b & 16)==0?0:(b & 16)>>4);
		sb.append((b & 8)==0?0:(b & 8)>>3);
		sb.append((b & 4)==0?0:(b & 4)>>2);
		sb.append((b & 2)==0?0:(b & 2)>>1);
		sb.append(b & 1);
		
//		System.out.println(sb.toString());
		
		return sb.toString();
	}


要转换byte数组,套上一个for循环即可




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值