В настоящее время это алгоритм сжатия Хаффмана , который назначает двоичные коды для символов, используемых в текстовом файле. Меньше бит для более частых и больше бит для менее частых символов.
В настоящее время я пытаюсь сохранить двоичный код big-endian в байте.
Допустим, я использую неподписанный символ для его удержания.
00000000
И я хочу сохранить некоторый двоичный код, который 1101
.
Заранее хочу извиниться, если это кажется тривиальным или обманом, но я просмотрел десятки других постов и не могу найти то, что мне нужно. Если бы кто-нибудь мог связать или быстро объяснить, это было бы очень признательно.
Будет ли это правильный синтаксис?
У меня будет какой-то внешний метод, такой как
int length = 0;
unsigned char byte = (some default value);
void pushBit(unsigned int bit){
if (bit == 1){
byte |= 1;
}
byte <<= 1;
length++;
if (length == 8) {
//Output the byte
length = 0;
}
}
Я видел несколько видео, объясняющих endianess , и я понимаю, что самый старший бит ( первый ) помещен в самый низкий адрес памяти .
Некоторые видео показывали байт слева направо, что заставляет меня думать, что мне нужно сдвинуть все влево, но всякий раз, когда я устанавливаю, переключаю, стираю, это справа, не так ли? Я извиняюсь еще раз, если это тривиально.
Так что после того, как мой метод завершит вставку 1101
в этот метод, байт будет выглядеть примерно так: 00001101
. Это big endian ? Я плохо знаю адреса, и я не уверен,
** -> 00001101
или 00001101
<- **
место считается наиболее значимым.
Нужно ли мне сдвигать оставшуюся сумму влево? </p>
Так что, поскольку я использовал 4 бита, я оставил бы сдвиг на 4 бита, чтобы получить 11010000
. Это big endian ?