我正在尝试将整数转换为字节并在我的代码中检索整数。
代码:
ByteArrayOutputStream barrayStream = null;
DataOutputStream outputStream = null;
try {
initSequence();
barrayStream = new ByteArrayOutputStream();
outputStream = new DataOutputStream(barrayStream);
outputStream.writeByte(4);
outputStream.writeInt(xxxx);
System.out.println(" String = "
+ Arrays.toString(barrayStream.toByteArray()));
handlePacket(barrayStream.toByteArray());
}catch (IOException ie) {
ie.printStackTrace();
} finally {
try {
if (barrayStream != null) {
barrayStream.close();
}
if (outputStream != null) {
outputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
void handlePacket(byte[] byteArray) throws IOException {
byte[] portArray = new byte[4];
System.arraycopy(byteArray, 1, portArray, 0, 4);
int byteToIntValue = 0;
for (int i = 0; i < portArray.length; i++) {
byteToIntValue = (byteToIntValue << 8) | portArray[i];
}
System.out.println("Port Number = " + byteToIntValue);
}
大于5120的整数在检索时给出正确的值。但低于5119给出负值 这有什么具体原因吗?任何帮助将不胜感激。
输出:对于整数5100,输出为 [0,0,19,-20]
表示大于5120的整数 [0,0,20,0]
答案 0 :(得分:0)
试试这个:
字节到int:
Byte b = new Byte(rno[0]);
int i = b.intValue();
int to byte:
int i = 234;
byte b = (byte) i;
一个字节始终用Java签名。您可以通过二进制获取其无符号值,并使用0xFF,但是:
答案 1 :(得分:0)
这是因为Java字节是有符号值,介于-128和127之间。您正在正确解析端口号。只是在您使用Arrays.toString
时,字节才会显示为带符号的数字。