Кратчайшее строковое представление для Int32 - PullRequest
1 голос
/ 04 ноября 2010

Мне нужно преобразовать Int32 в код, который необходимо ввести в веб-форму. Чтобы сделать его простым для посетителей, этот код должен быть максимально простым и коротким.

Кто-нибудь знает хороший алгоритм для преобразования Int32 в самое короткое строковое представление, используя только [0-9] и [A-Z]?

Ответы [ 6 ]

6 голосов
/ 04 ноября 2010

Вы могли бы кодировать в base-36, но для здравомыслия каждого (не в последнюю очередь ваших пользователей, имеющих дело с I против 1, O против 0 и т. Д.), Я предлагаю просто придерживаться гекса; плюс встроено:

    int value = 22334;
    string hex = Convert.ToString(value, 16); // 573e
    value = Convert.ToInt32(hex, 16);
6 голосов
/ 04 ноября 2010

A base 36 представление - это то, что вы хотите.При этом используются как буквенные, так и числовые символы для кодирования чисел для очень компактного представления.

1 голос
/ 04 ноября 2010

Просто пример, я не посмотрел все детали для этого.

С учетом 32-разрядного типа int:

Разделить его на 8x4 бита

4-битный массив дает 2 ^ 4 = 16 возможных комбинаций

Затем сопоставьте каждое буквенное значение 4 битов с символьным кодом ascii, начиная со строчной буквы A или любого другого.

0 голосов
/ 30 сентября 2017

У вас есть несколько вариантов:

  1. Base36 соответствует вашим заявленным требованиям
  2. Base64 короче, но у вас есть проблема с выходом из финальных = 1006 *

Одна из фундаментальных проблем, с которой вы столкнулись, заключается в том, что чем короче вы ее делаете, тем труднее ее правильно запомнить. Поэтому вам нужно подумать, хотите ли вы, чтобы это было для копирования / вставки или для запоминания людьми.

Для копирования / вставки я бы, вероятно, пошел с выравниванием base64, заданным так, чтобы избежать равенства на конце (но вы могли бы изменить = на _ и преобразовать обратно на сервер).

Для человека, читающего, предложил бы сделать что-то совсем другое.

0 голосов
/ 04 ноября 2010

Вы можете использовать класс Кодировка , чтобы получить строку:

int value = 1234;
string intString = Encoding.Default.GetString(BitConverter.GetBytes(value));

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

0 голосов
/ 04 ноября 2010
string s = code.ToString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...