我们有一个使用泽西的Java Rest服务。
我以字节数组的形式接收整数数据,其中嵌入了CRC。它作为Plain_text输入,变量的类型为string
。
我们需要重新检查CRC值。
由于它来自.Net应用程序,其中所有值都在0到255之间(带符号字节数组),而在Java中它介于-127到128之间(带符号字节数组)。
所以我需要建议如何在Java中将无符号字节数组转换为有符号字节数组?
我面临的其他问题是:
每当有超过127的值时,在java中它将显示垃圾值或63(常数值不确定原因)。
我觉得很奇怪,这些值小于127,但CRC值在另一边。
我希望我的问题清楚明确并提出建议。
由于其非常大的数组和(& 0xFF
),不会成功。因为我们有大的数组大小。
答案 0 :(得分:0)
要将带符号的字节数组转换为无符号我使用:
private static void printByteArrayFromSigned(byte[] arr) {
if(arr == null || arr.length == 0){
logger.debug("Array vuoto");
return;
}
StringBuilder sb = new StringBuilder();
for(byte b : arr) {
int x = b;
if(x<0){
x+=256;
sb.append("["+x+"]* ");
}else{
sb.append("["+x+"] ");
}
}
logger.debug(sb.toString());
}
//* converted
从无符号到有符号字节数组的反向使用:
private static void printByteArrayFromUnsigned(byte[] arr) {
if(arr == null || arr.length == 0){
logger.debug("Array vuoto");
return;
}
StringBuilder sb = new StringBuilder();
for(byte b : arr) {
int x = b;
if(x>127){
x-=256;
sb.append("["+x+"]* ");
}else{
sb.append("["+x+"] ");
}
}
logger.debug(sb.toString());
}
//* converted