Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как определить, что строка в Hex виде? 
:(
    Опции темы
Nicholas
  Дата 19.2.2005, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 30.9.2004

Репутация: нет
Всего: 0



У меня есть некая строка, мне надо узнать в Hex виде она или нет?
PM MAIL ICQ   Вверх
dm9
Дата 19.2.2005, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 6
Всего: 137



Поясни вопрос ещё раз для глупых, пожалуйста.

Это сообщение отредактировал(а) dm9 - 19.2.2005, 12:19
PM MAIL ICQ   Вверх
RA
Дата 19.2.2005, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 14
Всего: 115



Цитата(Nicholas @ 19.2.2005, 07:30)
Hex виде она или нет?


Это когда она выглядит так чтоли: "Y.O.!.M.Y.N.I.G.G.A.Z" ?

PM   Вверх
Vit
Дата 20.2.2005, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Строка "ABBA" - в hex виде или нет?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Unknown_Error
Дата 20.2.2005, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.1.2005

Репутация: нет
Всего: нет



Цитата(Vit @ 20.2.2005, 07:35)
Строка "ABBA" - в hex виде или нет?

Скорее всего, да!
PM MAIL ICQ   Вверх
Vit
Дата 20.2.2005, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата(Unknown_Error @ 19.2.2005, 22:52)
Цитата(Vit @ 20.2.2005, 07:35)
Строка "ABBA" - в hex виде или нет?

Скорее всего, да!

Ага... Если взята с сайта www.asm.com то в hex виде а если с сайта www.misic.com то не в hex так?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Unknown_Error
Дата 20.2.2005, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.1.2005

Репутация: нет
Всего: нет



Цитата(Vit @ 20.2.2005, 08:08)
Ага... Если взята с сайта www.asm.com то в hex виде а если с сайта www.misic.com то не в hex так?

Я лично понял так.
Например есть строка типа 'ABBA' она имеет представлена в 16 ричном виде, а строка 'ASSA' уже нет. Т.е. челу скорее всего нужно определить является ли строка "строкой" или числом в "шестнадцатеричном" виде.
PM MAIL ICQ   Вверх
Zero
Дата 20.2.2005, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Есть ещё версия, что строка напоминает ведьму...(с англ.)
PM MAIL ICQ   Вверх
Александра
Дата 20.2.2005, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 20.2.2005
Где: Москва

Репутация: 7
Всего: 12



Код
function IsStrHex(str: string): boolean;
var s: string;
   i: byte;
begin
 result := true;
 s := UpperCase(str);
 for i := 1 to length(s) do
   if not (s[i] in ['0'..'9', 'A'..'F']) then begin
     result := false;
     break
   end
end


возврашает true, если строк - HEX, иначе false
--------------------
PM   Вверх
SoWa
Дата 20.2.2005, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 2
Всего: 74



А если это "AFDCC34cf"? Эта ф-я маленькие буквы опознает? smile
Хотя, можно исправить!
Еще одно НО: НЕХ-строки определенной длинны(не более 8), если они в файлах.


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Александра
Дата 20.2.2005, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 20.2.2005
Где: Москва

Репутация: 7
Всего: 12



SoWa
для это там и стоит UpperCase
--------------------
PM   Вверх
Александра
Дата 20.2.2005, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 20.2.2005
Где: Москва

Репутация: 7
Всего: 12



SoWa
и что ты имелл виду "не более 8 символов"?????
--------------------
PM   Вверх
Snowy
Дата 21.2.2005, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Вот так проще и быстрее:
Код

function IsHex(s:string):boolean;
var
 V,Code: Integer;
begin
 if s[1]<>'$' then s:='$'+s;
 Val(S, V, Code);
 result:=Code=0;
end;

PM MAIL   Вверх
nickelfire
Дата 21.2.2005, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 22.12.2004

Репутация: нет
Всего: нет



А ещё можно немного не корректно
Код

try
edit1.Text:=inttostr(strtoint('$'+edit2.text));
except

end;

если в except выпала значит не hex. smile
PM MAIL   Вверх
Александра
Дата 21.2.2005, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 20.2.2005
Где: Москва

Репутация: 7
Всего: 12



nickelfire
тогда уж лучше TryStrToInt
--------------------
PM   Вверх
nickelfire
Дата 21.2.2005, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 22.12.2004

Репутация: нет
Всего: нет



Надо-же а я столько мучался.Спасибо.
PM MAIL   Вверх
Snowy
Дата 21.2.2005, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



smile Что-то этот код мне напоминает.
Код

function TryStrToInt(const S: string; out Value: Integer): Boolean;
var
 E: Integer;
begin
 Val(S, Value, E);
 Result := E = 0;
end;

Только проверки на '$' нет smile
PM MAIL   Вверх
chaos
Дата 23.2.2005, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



Цитата
if not (s[i] in ['0'..'9', 'A'..'F']) then begin
  result := false;
 break
end

а нафик begin, end, & break? Я думаю они лишнии
И еще, а если строка будет иметь вид 0xFFFF или FFFFh или $FFFF, по твоя вункция вернет ложь, а это не верно

Это сообщение отредактировал(а) chaos - 23.2.2005, 13:35
PM WWW   Вверх
Александра
Дата 23.2.2005, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 20.2.2005
Где: Москва

Репутация: 7
Всего: 12



chaos
чтобы не пробегать цикл до конца, разве не логично?

а если, то пусть Nicholas скажет конкретно, а мой код просто делает проверку только на то, записана ли строка в формате 16-ой системы, как он и просил, а эти условности надуманны, а в школе к примеру школьники пользуются системой - FFFF(16)...

исправленный вариант, который кто-то мог бы написать вместо необоснованной критики:

Код
function IsStrHex(s: string): boolean;
var i: byte;
begin
 if s = '' then begin
   result := false;
   exit;
 end;

 result := true;
 s := UpperCase(s);
 if copy(s, 1, 2) = '0X' then delete(s, 1, 2)
   else if s[1] = '$' then delete(s, 1, 1)
     else if s[length(s)] = 'H' then delete(s, length(s), 1);
 if s <> '' then begin
   for i := 1 to length(s) do
     if not (s[i] in ['0'..'9', 'A'..'F']) then begin
       result := false;
       break
     end
 end else result := false
end;



з.ы. trystrtoint можно использовать на проверку типа 0xA и $A, но не Ah
--------------------
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0673 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.