java 16进制字节数组_java 字节数组与16进制转换

这是一个关于十六进制编码和解码的Java实现。`HexCodec`类提供了两个静态方法,`hexEncode`用于将字节数组转换为十六进制字符串,而`hexDecode`则将十六进制字符串还原为原始字节数组。这两个方法在处理二进制数据和字符串之间的转换时非常有用。
摘要由CSDN通过智能技术生成

public class HexCodec {

static final char[] HEX = new char[]{ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };

public static String hexEncode(byte[] buffer) {

if (buffer.length == 0) {

return "";

}

int holder = 0;

char[] chars = new char[buffer.length * 2];

for (int i = 0; i < buffer.length; i++) {

holder = (buffer[i] & 0xf0) >> 4;

chars[i * 2] = HEX[holder];

holder = buffer[i] & 0x0f;

chars[(i * 2) + 1] = HEX[holder];

}

return new String(chars);

}

public static byte[] hexDecode(String hex) {

//A null string returns an empty array

if (hex == null || hex.length() == 0) {

return new byte[0];

} else if (hex.length() < 3) {

return new byte[]{ (byte)(Integer.parseInt(hex, 16) & 0xff) };

}

//Adjust accordingly for odd-length strings

int count = hex.length();

int nibble = 0;

if (count % 2 != 0) {

count++;

nibble = 1;

}

byte[] buf = new byte[count / 2];

char c = 0;

int holder = 0;

int pos = 0;

for (int i = 0; i < buf.length; i++) {

for (int z = 0; z < 2 && pos

c = hex.charAt(pos++);

if (c >= 'A' && c <= 'F') {

c -= 55;

} else if (c >= '0' && c <= '9') {

c -= 48;

} else if (c >= 'a' && c <= 'f') {

c -= 87;

}

if (nibble == 0) {

holder = c << 4;

} else {

holder |= c;

buf[i] = (byte)holder;

}

nibble = 1 - nibble;

}

}

return buf;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值