Если старший значащий бит должен быть нулем, то число одинаково, независимо от того, подписано оно или нет, (при условии представления дополнения до двух). Так, например, 16-битные целые числа с нулем MSB представляют числа от 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, они работают, если аргумент представляет целое число со знаком или без знака.)