2013-04-15 2 views
0

Есть много ответов уже на эту тему, но я не могу найти ни одного, что похоже на то, что я ищу.Создайте уникальное целое число на основе заданной строки

Мне нужно было бы создать уникальный отрицательный идентификатор (int) из заданной строки. Был бы рад, если бы был декодирование, но не обязательно.

+6

Уникальный в каком контексте? Универсально, для каждой сети, на компьютер, за сеанс, для каждого пользователя, за процесс или что? –

ответ

4

Вы можете попробовать myString.GetHashCode() Не гарантировано будет уникальным, но определенно вернет тот же ключ для той же строки.

+0

И если он еще не отрицательный, ему нужно будет его отрицать. Конечно, это удвоит количество столкновений. –

+0

Спасибо. Я использую это, и это работает нормально. – goul

+2

«Сам хэш-код не гарантированно стабилен. Коды хэшей для идентичных строк могут различаться в разных версиях .NET Framework и на разных платформах (например, 32-разрядных и 64-разрядных) для одной версии .NET Framework В некоторых случаях они могут даже отличаться по области приложений ». https://msdn.microsoft.com/en-us/library/system.string.gethashcode(v=vs.110).aspx – jasdefer

4

Очевидно, что такого преобразования нет. int размер ограничен 32 битами, а string размер в значительной степени неограничен. Вы столкнетесь с конфликтами, если не примените некоторые ограничения к вашим строкам.

+1

Хорошее замечание. Я использую ответ, предложенный ниже, но буду обращать внимание на мою длину строки. спасибо – goul

0

Невозможно создать уникальный int для произвольной длины длиной.

int имеет 32 бита данных, строка из 100 символов (при условии, что C#) будет иметь 1600 бит данных, поэтому у вас будет не менее 1600/32 коллизий.

[смешно]

вы можете:

string a = "dgfadg"; 
var bytes = System.Text.Encoding.Unicode.GetBytes(a); 
BigInteger integer= new BigInteger(bytes); 

[/ забавен]

+1

бог, слишком долго .... – Elaine

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

  • Нет связанных вопросов^_^