> -- Trurl писал(а):
> PROCEDURE COMPOSE (b0, b1, b2, b3 : BYTE) : INTEGER;Кажется, так нельзя. Ведь ORD(BITS(b0)) = b0 и приходим к тому, с чего начинали.
Объявите так: PROCEDURE COMPOSE (b0, b1, b2, b3 :INTEGER) : INTEGER;

-----

На самом деле байты внутри int - это ерунда.

Вот биты внутри байта - это гораздо круче! На счёт битов в байте есть страшная тайна. Оказывается они (в x86) идутнаоборот! То есть если передавать биты по сети, то сначала надо отправить вовсе не 0-вой бит, а 7-мой, потом 6-той и т.д.

Вот, например, стандарт передачи битов по сети в заголовке RTP-пакета:http://rfc.net/rfc1889.html#s5.1Там написано, что в 0 и 1 битах заголовка передается версия. По наивности (раз она в 0 и 1 битах) можно было бы попытаться узнать версию так:
this.version = (this.datagram[0] & 3);
и это, оказывается, не правильно; а правильно так:
this.version = (this.datagram[0] >> 6) & 3;

Говорят, что все имплементаторы всяких сетевых протоколов на этом обязательно всегда накалываются. Вот и я тоже накололся по первому разу.