2016-09-08 1 views
-2

Можно ли кодировать строку определенным образом, чтобы минимизировать количество байтов? в основном мне нужно получить 29 символов до 11 байтов данных.C# Как кодировать строку для минимизации байтов

var myString = "usmiaanzaklaacn40879005900133"; 
     byte[] bytes = Encoding.UTF8.GetBytes(myString); 

     Console.WriteLine(bytes.Length); //Output = 29, 1 byte per character 
     Console.ReadKey(); 

Это показывает при кодировании с UTF8, что строка 29 символов приводит к 29 Bytes ... мне нужно 29 строку символов, в результате 11 байт или меньше .. это возможно? Я думал, что у меня может быть какой-то алгоритм поиска или бинарного отображения, но я немного не уверен, как это сделать на C#.

EDIT:

Так у меня есть чип, который имеет полезную нагрузку пользовательских данных 11 байт. Я хочу, чтобы иметь возможность сжать 29-значную строку (уникальную) в байты, назначить ее «пользовательским данным», а затем получить пользовательские байты данных и распаковать ее обратно на 29-строчную строку символов ... теперь я не знаю если это возможно, но любая помощь будет принята с благодарностью .. спасибо :)

сама строка [usmia] - [anzakl] - [aacn40879005900] - [133] = [origin] - [dest] - [random/unique] - [вес]

ОК последние 14 символов являются целыми числами.

У меня есть доступ ко всем происхождению и месту назначения ... было бы списано с целью создания хранилища ключей, у которого есть ключ как «Происхождение, например, usmia», а значение - конкретный байт. Я предполагаю, что это означало бы я мог бы иметь только 256 разных Origin и Dests, а затем просто сделать последние 14 символов целыми числами?

+1

Почему это должно быть 11 байт? –

+0

Поскольку у меня есть только 11 байт, чтобы играть с ... так что это может быть меньше, но максимум 11 – DaveHutchy

+0

http://stackoverflow.com/questions/7343465/compression-decompression-string-with-c-sharp – Rob

ответ

0

15 lg (26) + 14 lg (10) ~ = 117 бит ~ = 14,6 байт. (lg = log base 2)

Так что даже я был настроен оптимистично и предположил, что ваши строки были всегда 15 строчных букв, за которыми следует 14 цифр, для представления будет по меньшей мере 15 байт.

Если не существует больше ограничений, например, допустимы только буквы нижнего регистра a, c, i, k, l, m, n, s, u и z, то нет, вы не можете закодировать это в 11 байт. Ой, подождите, даже не тогда. Даже это займет чуть более 12 байт.

+0

Хорошо спасибо. я не был уверен, возможно ли это или нет. Да, вы правы, они всегда будут содержать 15 строчных букв, а затем 14 цифр. в основном [usmia] - [anzakl] - [aacn40879005900] - [133] = [origin] - [dest] - [random] - [weight] – DaveHutchy

+1

Хорошо, если USMIA и ANZAKL являются складами или кодами аэропортов, сократите их, используя шифр на обе стороны сделки. USA-MIAMI становится a, USA-JFK становится b, ASTRALIA-AUKLAND становится z. Используя Hex, вы можете указать 16 аэропортов на 2 байта. Если вы ТОЛЬКО имеете определенные комбинации аэропортов, вы можете пойти дальше. Знание важных данных. –

Смежные вопросы