字节到整数转换&反之亦然java

时间:2013-12-04 09:27:40

标签: java

我正在尝试将整数转换为字节并在我的代码中检索整数。

代码:

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]

2 个答案:

答案 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时,字节才会显示为带符号的数字。