Получение уникальной строки из целого числа
От: king  
Дата: 11.06.04 05:37
Оценка:
Вот возникла такая проблема: как лучше всего можно получить из 4х байтового целого строку из 7 символов? и чтобы для двух разных чисел была очень малая вероятность что эти строки окажутся одинаковыми?
Re: Получение уникальной строки из целого числа
От: Sergeant Украина www.photomirror.com.ua
Дата: 11.06.04 06:28
Оценка:
Здравствуйте, king, Вы писали:

K>Вот возникла такая проблема: как лучше всего можно получить из 4х байтового целого строку из 7 символов? и чтобы для двух разных чисел была очень малая вероятность что эти строки окажутся одинаковыми?


Нууу, посчитать что-нибудь: MD5, CRC и т.д и т.п. И полученную последовательность считать строкой.
Курить я буду, но пить не брошу.
Re[2]: Получение уникальной строки из целого числа
От: Вадим Никулин Россия Здесь
Дата: 11.06.04 06:39
Оценка:
Здравствуйте, Sergeant, Вы писали:

S>Нууу, посчитать что-нибудь: MD5, CRC и т.д и т.п. И полученную последовательность считать строкой.


Если "что-то считать строкой", то можно исходные четыре байта считать строкой И колизий совсем не будет
Re: Получение уникальной строки из целого числа
От: Аноним  
Дата: 11.06.04 06:42
Оценка:
Здравствуйте, king, Вы писали:

K>Вот возникла такая проблема: как лучше всего можно получить из 4х байтового целого строку из 7 символов? и чтобы для двух разных чисел была очень малая вероятность что эти строки окажутся одинаковыми?


А какие символы должны быть в строке?
Re: Получение уникальной строки из целого числа
От: Demon Россия  
Дата: 11.06.04 06:44
Оценка: 6 (1)
Здравствуйте, king, Вы писали:

K>Вот возникла такая проблема: как лучше всего можно получить из 4х байтового целого строку из 7 символов? и чтобы для двух разных чисел была очень малая вероятность что эти строки окажутся одинаковыми?


Ну элементарно же.

void cnv( DWORD n, char *s )
{
     const char alf[32+1] = "0123456789ABCDEFGHIJKLMNOPQRSTUV";
     const DWORD mask2 = (1<<2)-1;
     const DWORD mask5 = (1<<5)-1;
     s[0] = alf[ n & mask5 ];   n >>= 5;
     s[1] = alf[ n & mask5 ];   n >>= 5;
     s[2] = alf[ n & mask5 ];   n >>= 5;
     s[3] = alf[ n & mask5 ];   n >>= 5;
     s[4] = alf[ n & mask5 ];   n >>= 5;
     s[5] = alf[ n & mask5 ];   n >>= 5;
     s[6] = alf[ n & mask2 ];
     s[7] = 0;
}


Отображение 1 <-> 1
Re[2]: Получение уникальной строки из целого числа
От: king  
Дата: 11.06.04 07:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, king, Вы писали:


K>>Вот возникла такая проблема: как лучше всего можно получить из 4х байтового целого строку из 7 символов? и чтобы для двух разных чисел была очень малая вероятность что эти строки окажутся одинаковыми?


А>А какие символы должны быть в строке?


Да вроде нашлось решение, Base64 подходит, и то что Demon ответил тоже.
Re[2]: Получение уникальной строки из целого числа
От: Кодт Россия  
Дата: 11.06.04 09:38
Оценка: +1 :)
Здравствуйте, Demon, Вы писали:

D>   const char alf[32+1] = "0123456789ABCDEFGHIJKLMNOPQRSTUV";

Лучше такой алфавит: "23456789ABCDEFGHJKLMNPQRSTUVWXYZ"
Получится генерилка серийных номеров. Там убраны конфликтные 1/I, 0/O.
Перекуём баги на фичи!
Re: Получение уникальной строки из целого числа
От: adontz Грузия http://adontz.wordpress.com/
Дата: 11.06.04 10:52
Оценка:
Здравствуйте, king, Вы писали:

K>Вот возникла такая проблема: как лучше всего можно получить из 4х байтового целого строку из 7 символов?

и чтобы для двух разных чисел была очень малая вероятность что эти строки окажутся одинаковыми?

У нас 26 букв латинскго алфавита, в двух регистрах. Итого 52 симсола. Ещё 10 цифр. Итого 62.
6 симсвольных комбинаций 56800235584, то есть 32-х битное число укладывается с запасом.
A journey of a thousand miles must begin with a single step © Lau Tsu
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.