|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
06.04.2008, 16:37 | #1 |
Форумчанин
Регистрация: 05.04.2008
Сообщений: 244
|
Как создать обратную функцию, которая из уникального номера будет возвращать строку?
Добрый день!
Есть функция (function Unc2Str(s: string): UInt64), которая строку преобразует в уникальный номер, а как создать обратную функцию (function Str2Unc(Unc: UInt64): String), которая из уникального номера будет возвращать строку: type UInt64 = 0..9223372036854775807; function Unc2Str(s: string): UInt64; var x: Integer; begin Result := 0; for x := 1 to Length(s) do Result := Result + ((Ord(s[x])) shl ((x - 1) * 8)); end; Всем спасибо за помощь! |
06.04.2008, 18:41 | #2 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Никак. По определению. Только через таблицы/массивы/деревья и т.п.
|
06.04.2008, 18:58 | #3 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
А так ли уникально число, которое получается при вызове Unc2Str ?
Для коротких строк Вы всего лишь перегоняете 8 байт строки в 8 байт числа. Для строк больше 8 символов вернуть всю строку уже не получится, но для строк < 8 байт: Код:
|
06.04.2008, 19:51 | #4 |
Форумчанин
Регистрация: 05.04.2008
Сообщений: 244
|
Как можно реализовать такие же функции для строк большего числа символов?
Спасибо жза ответ!
А как можно реализовать такие же функции для строк большего числа символов? Спасибо за ответ! |
06.04.2008, 20:06 | #5 |
Форумчанин
Регистрация: 05.04.2008
Сообщений: 244
|
Ваша функция alexBlack не работает и до 8 символов!
для alexBlack
Я проверил Вашу функцию обратного получения строки - она не работает и до 8 символов. Хотя хотелось бы решение для неограниченного числа символов. Как же решить проблему? Спасибо. |
06.04.2008, 20:47 | #6 | |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Цитата:
Код:
|
|
06.04.2008, 20:58 | #7 |
Форумчанин
Регистрация: 05.04.2008
Сообщений: 244
|
Хотелось бы найти решение для любого числа символов в строке.
Спасибо, да так работает, но хотелось бы найти решение для любого числа символов в строке. Может у кого есть идеи как это можно решить?
Спасибо. |
06.04.2008, 21:03 | #8 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
А для чего это. Может изменить сам подход к решению ?
|
06.04.2008, 21:10 | #9 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
SkAndrew, есть такая вещь - необратимые хэш-функции. У Вас - одна из них. Int64 может принимать максимум 2^64 (примерно 10^19) различных значений, а строка длиной, скажем, 32 символа - 2^(8*32) - примерно 10^77 значений, т.е. на каждое "уникальное" число будет приходиться почти 10^60 разных строк. Какую из них Вы планируете восстановить?
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как создать процедуру и функцию? | Absent | Общие вопросы Delphi | 1 | 18.11.2007 17:36 |
Работа с DLL - программа, которая будет общаться с файлами данных, представленных в текстовом виде | SnakeMan | Общие вопросы Delphi | 31 | 02.11.2007 13:35 |
Скажите функцию которая будет запускать приложение при каждой загрузке винды | pentiumForever | Общие вопросы Delphi | 9 | 08.09.2007 01:54 |
как вызвать в Dll по указателю функцию, которая определена в главном потоке? | SaintRain | Общие вопросы Delphi | 1 | 25.11.2006 08:27 |
как вызвать из Dll функцию, которая определена в главном потоке? | SaintRain | Win Api | 1 | 23.11.2006 20:08 |