java怎么将长度为2位的16进制格式的字符串转成一个字节(byte)?
以下是是java代码,第一个方法转换的结果有问题
public static byte stringTobyte(String hex) {
char[] hexChars = hex.toCharArray();
byte b=(byte) (charToByte(hexChars[0]) << 4 | charToByte(hexChars[1]));
return b;
}
public static byte[] hexStringToBytes(String hexString) {
hexString = hexString.toLowerCase();
String[] hexStrings = hexString.split(" ");
byte[] bytes = new byte[hexStrings.length];
for (int i = 0; i < hexStrings.length; i++) {
char[] hexChars = hexStrings[i].toCharArray();
bytes[i] = (byte) (charToByte(hexChars[0]) << 4 | charToByte(hexChars[1]));
}
return bytes;
}
第一个方法是把长度为2位的16进制格式的字符串转换为字节,第二个是把一个分隔符为空格的多个2位长度的16进制字符串转换为字节数组
第二个方法是从网上找的,第一个方法是从第二个方法的for循环代码里抠出来改的。
但第一个方法测试使用有问题,第二个方法测试没有问题,
第一个方法,只要出现了字母,调用后转换的byte输出出来的全是-1,在转成16进制的字符串,就变成了FF,例如输入0A,0B,AA ,AB等,转换后的byte值是-1,转回16进制字符串会变成FF
第二个方法就没有这种问题,例如输入"0A 0B AA AB",转成字节数组,在转回来,还是"0A 0B AA AB"
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
参考
commons-codec
工具里面有个Hex