所以通常我使用Netty,它是BigEndianHeapChannelBuffer,用Java來接收未加密的short(來自C++軟件)。 當我這樣做是這樣的:如何在java中存儲unsigned short?
buf.readUnsignedByte(); buf.readUnsignedByte();
返回: 149 and 00
。直到現在一切都很好。因爲服務器發送149作爲無符號短[2字節]。
取而代之的是,我想(重新啓動我的申請後OFC)接收無符號短:
buf.readUnsignedShort();
和奇蹟發生。它返回:38144
。
下一步是檢索無符號字節: short type = buf.readUnsignedByte(); System.out.println(type);
並將其返回:1
這是正確的輸出。
任何人都可以幫助我嗎? 我看着更深,這就是網狀做它:
public short readShort() {
checkReadableBytes(2);
short v = getShort(readerIndex);
readerIndex += 2;
return v;
}
public int readUnsignedShort() {
return readShort() & 0xFFFF;
}
但我仍想不出什麼是錯的。我希望能夠讀懂那149.
顯然,終結是問題。序列149-0是* little * -endian:第一個字節是小字節。 –
沒什麼魔法,149 * 256 + 0 = 38144。你已經指定了BigEndian,所以這看起來是正確的,最重要的字節首先被髮送。 –
您可能的意思是「無符號短[2個字節]」 – Ixx