如果最高有效位必須爲零,那麼無論是有符號還是無符號(假設是二進制補碼錶示形式),數字都是相同的。因此,舉例來說,具有MSB零的16位整數表示從0
到32767
(含)的數字。
假設你正在寫一個OutputStream
和你的「網絡秩序」的定義首先是最顯著字節,那麼你需要做這樣的事情:
public void writeShort(OutputStream os, short s) throws IOException {
os.write((byte) (s >> 8));
os.write((byte) s);
}
和
public void writeLong(OutputStream os, long l) throws IOException {
os.write((byte) (l >> 56));
os.write((byte) (l >> 48));
os.write((byte) (l >> 40));
os.write((byte) (l >> 32));
os.write((byte) (l >> 24));
os.write((byte) (l >> 16));
os.write((byte) (l >> 8));
os.write((byte) l);
}
請注意,這些適用於有符號和無符號整數。 (或者對於Java上下文更精確,如果參數代表是有符號或無符號整數,則它們工作。)
在Java中,「short」被強制爲16位,而「long」強制爲64位。它們是簽名類型,但是你指定msb將始終爲0,所以這應該不重要。這足夠嗎? –
您是否想將它作爲二進制數據寫入流中,是什麼意思?將它保持爲「長度」是什麼問題? –
是的。我必須將它寫入流中。我嘗試發送很長時間,但沒有奏效。收件人ch咽。當其他已經開發的發送者發送時,接收者看起來沒有問題。爲了清晰起見,我在問題中添加了一個句子。我無法改變規格。 –