• Как можно преобразовать число из 3 байт в число из 2 байт?

    Godless
    @Godless
    В общем и целом, ответ на Ваш вопрос - нет, нельзя. как ни крути, из 3х байт 2 байта не сделать без потерь.
    Иначе кто-нить уже давно бы сделал архиватор до 2х байт всего чего угодно...

    Но в порядке альтернативного секса в голову, давайте покумекаем.

    1. Если вы запишите в строку все биты 3х байтового числа, то получите последовательность нулей и единиц. Можно попробовать сжать эту строку например zlib.compress в памяти, отрезать стандартный двухбайтовый заголовок и посмотреть на то что получилось. Если влезет в 2 байта - то да. Обратное преобразование такое - добавляем заголовок zlib, делаем zlib.decompress и переводим в байты.
      Тыдыщщщ, а если сжатая строка не влазит - то ничего не получится.
      Не взлетит. ;-)
    2. Еще вариант, когда есть какие-то известные ограничения на серийные номера. Например, вы знаете, что они все в диапазоне 1000 - 66000. Тогда да =) влезет в 2 байта. Даже если диапазонов несколько, главное чтобы количество значений было не больше 2^16.

    В остальных случаях - i'm sorry, be happy.

    ЗЫ: тему сжатия можно раскрутить, придумав многопроходные схемы, типо сначала начальный бит, потом бит разницы со следующим, а потом к этой строке сжатие, сразу сжатие бит по Хаффману с какой-нить популярной таблицей (готовой ибо передавать таблицу вам негде); попробовать арифметическое кодирование к битам с длиной.
    Но все это дурь космическая - найдите место для байта. ;-)

    Это кажется про Вас =) : Повесть об одном байте
    Другой линк
    Ответ написан
    1 комментарий