[英]Converting String to UTF-8 byte array returns a negative value in Java
[英]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.