簡體   English   中英

從字節數組轉換為short產生錯誤的負值

[英]Converting from byte array to short producing wrong negative value

因為我已經完成了位/字節級別的操作,已經有一段時間了,所以如果這很簡單,請原諒我。

我正在從嵌入式設備通過Java應用程序中的TCP套接字接收數據。 數據是低位字節序(最低有效字節在前),我目前正在嘗試從數據數組中獲取short值。 為此,我使用以下代碼:

byte[] valBytes = {data[0], data[1]};
short val = EndianArrayUtils.getShortFromLittleEndianRange(valBytes);

這對於正數有效,但當short應該為-1時,我得到的是-2。 產生-2的數據是:

byte[] valBytes = {(byte)0xff, (byte)0xff};
short val = EndianArrayUtils.getShortFromLittleEndianRange(valBytes);

我想念什么嗎? 二進制補碼-1應該是11111111 11111111正確嗎?

編輯

我完全忘記了我實際上是寫EndianArrayUtils getShortFromLittleEndianRange方法的代碼是

public static short getShortFromLittleEndianRange(byte[] range){
        return (short)((short)(range[1] >> 8) + (short)(range[0]));
    }

顯然,它對負數的運算方式有問題。

我會用ByteBuffer

byte[] valBytes = {(byte)0xff, (byte)0xff};
short s = ByteBuffer.wrap(valBytes).order(ByteOrder.LITTLE_ENDIAN).getShort();
System.out.println(s);

版畫

-1

如果讀入ByteBuffer,則根本不需要byte[]

修正你的例子

public static short getShortFromLittleEndianRange(byte[] range){
    return (short)((range[1] << 8) + (range[0] & 0xff));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM