如何解决如何在Java中将带符号的字节数组转换为ASCII
在Java程序中 我已经将字节数组签名为
[-112,21,64,7,50,54,127]
我如何转换为ASCII码 等于
901540000732367F
解决方法
结果中的字节顺序似乎与数组的顺序相反,因此您应该以相反的顺序迭代数组,并以预定义的位数移动每个元素:
private static String convertToHexFullByte(byte[] arr) {
return convertToHex(arr,8);
}
private static String convertToHexHalfByte(byte[] arr) {
return convertToHex(arr,4);
}
private static String convertToHex(byte[] arr,int bits) {
long mask = 0;
for (int i = 0; i < bits; i++) {
mask |= 1 << i;
}
long res = 0;
for (int i = arr.length - 1,j = 0; i >= 0; i--,j += bits) {
res |= (arr[i] & mask) << j;
}
return Long.toHexString(res).toUpperCase();
}
测试
public static void main(String args[]) {
byte[] arr4 = {49,55,48,51,55};
System.out.println(convertToHexHalfByte(arr4));
byte[] arr8 = {-112,21,64,7,50,54,127};
System.out.println(convertToHexFullByte(arr8));
}
输出
17037
901540000732367F
,
尝试一下。它的工作原理是:
- 流式传输字节数组的索引
- 映射到int并摆脱符号扩展名
- 通过班次和或工序减少很多。
byte[] bytes = { -112,127 };
long lng = IntStream.range(0,bytes.length)
.mapToLong(i -> bytes[i] & 0xff)
.reduce(0L,(a,b) -> (a << 8) | b);
System.out.println("long decimal value = " + lng);
System.out.println("long hex value = " + Long.toHexString(lng));
打印
long decimal value = -8064469188872096129
long hex value = 901540000732367f
使用相同的技术,{49,55}
的另一个示例
应该是:
long decimal value = 211379303223
long hex value = 3137303337
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。