十六进制字符串转字节数组,整数转字节数组,Java语言

最近在做密码产品方面的接口测试,经常需要在16进制和字节数组之间转换,以及将整数转换为字节流进行网络传输,因此整理出如下的工具代码,在这里进行记录,以供后续重复使用。

十六进制转字节数组

    public static byte[] hexToBytes(String hex) {
    	int len = hex.length();
    	byte[] result = new byte[len/2];
    	
    	if(len % 2 != 0) {
    		System.out.println("len % 2 != 0");
    		return null;
    	}
    	
    	for(int i = 0, j = 0; i < len; i+=2, j++) {
    		result[j] = (byte)Integer.valueOf(hex.substring(i, i + 2), 16).intValue();
    	}
    	
    	return result;
    }

 字节数组用十六进制输出

这里做了一个重载,默认输出整个字节数组,也可以指定长度。

如果你想要一个String,而不是直接输出,用String的format方法应该可以做到,可以自行改造测试一下。

    public static void showHex(String msg, byte[] data) {
    	showHex(msg, data, data.length);
    }

    public static void showHex(String msg, byte[] data, int dataLen) {
    	int limitLen = data.length < dataLen ? data.length : dataLen;
    	System.out.println(msg);
    	for(int i = 0; i < limitLen; ++i) {
    		if(i != 0 && i % 32 == 0) {
    			System.out.println();
    		}
    		System.out.printf("%02X", data[i]);
    	}
    	System.out.println();
    }

 整数转换为字节数组

这里要注意字节序的问题,因为Java保存整数用的是小端序,所以这里转换也是把低位数据放在数组的前面。

	/**
	 * int整数转换为4字节的byte数组 小端序
	 * 
	 * @param i
	 *            整数
	 * @return byte数组
	 */
	public static byte[] intToByte4(int i) {
		byte[] targets = new byte[4];
		targets[0] = (byte) (i & 0xFF);
		targets[1] = (byte) (i >> 8 & 0xFF);
		targets[2] = (byte) (i >> 16 & 0xFF);
		targets[3] = (byte) (i >> 24 & 0xFF);
		return targets;
	}

字节数组转换为整数

这里同样要注意字节序,否则转换出的整数很可能不对。这里是按照小端序进行处理,如果你们系统使用的大端序,记得一定要调整一下。

	/**
	 * byte数组转换为int整数 小端序
	 * 
	 * @param bytes
	 *            byte数组
	 * @param off
	 *            开始位置
	 * @return int整数
	 */
	public static int byte4ToInt(byte[] bytes, int off) {
		int b0 = bytes[off] & 0xFF;
		int b1 = bytes[off + 1] & 0xFF;
		int b2 = bytes[off + 2] & 0xFF;
		int b3 = bytes[off + 3] & 0xFF;
		return (b0) | (b1 << 8) | (b2 << 16) | (b3 << 24);
	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值