Сжатие небольшой строки - PullRequest
0 голосов
/ 02 марта 2011

У меня есть данные 0f 340 байтов в строке в основном состоит из знаков и чисел, таких как "føàA¹º @ ëUë5§Ž§" Я хочу сжать в 250 или менее байтов, чтобы сохранить его на моей карте RFID. Поскольку эти данные связаны с темп. Отпечатка пальца. Я хочу сжатие без потерь. Так есть ли алгоритм, который я могу реализовать в C # для его сжатия?

Ответы [ 2 ]

1 голос
/ 02 марта 2011

Если данные строго цифры и знаки, я настоятельно рекомендую изменить числа на значения, основанные на int.Например:

+ 12939272-23923 + 927392

можно сжать в 3 части 32-разрядных целых чисел, что составляет 22 байта => 16 байтов.Выбор правильного целочисленного размера (будь то 32-битный, 24-битный, 16-битный) должен помочь.

Если целочисленный размер сильно варьируется, вы можете использовать 8-битный для начала и использовать значение 255 дляукажите, что следующий 8-разрядный становится 8 более значимыми битами целого числа, что делает его 15-разрядным.

альтернативно, вы можете определить наиболее значимый символ и присвоить ему 0.второй по значимости символ получает 10, а третий - 110. Это очень грубое сжатие, но если ваши данные очень ограничены, это может просто сработать за вас.

0 голосов
/ 02 марта 2011

Есть ли какая-либо другая информация, которую вы знаете о вашей строке? Например, он содержит определенные символы чаще, чем другие? Содержит ли он все 255 символов или только их подмножество?

Если это так, кодировка Хаффмана может вам помочь, см. эту или эту другую ссылку для реализаций в C #.

Если честно, все зависит от того, как выглядит ваша входная строка. Я бы попробовал использовать rar, zip, 7zip (LZMA) с очень маленькими размерами словаря (в противном случае они просто будут использовать слишком много места для предварительно обработанной информации) и посмотреть, насколько велика сжатая необработанная информация. файл, который они создают (вероятно, придется использовать их библиотеки для того, чтобы они убирали заголовки для экономии места). Если какой-либо из них создаст файл размером менее 250b, найдите для него библиотеку c # и все, что нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...