Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.08.2008, 18:03   #1
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию Dec to Hex - пример использования

Нашел функцию преобразования Dec в Hex. А делфи ругается Не пойму почему.
Код:
function dec2hex(value: dword): string[8];
const
hexdigit = '0123456789ABCDEF';
begin
while value <> 0 do
begin
   dec2hex := hexdigit[succ(value and $F)];
   value := value shr 4;
end;
if dec2hex = '' then dec2hex := '0';
end;
Ругается на строку function dec2hex(value: dword): string[8];
Не пойму почему. Приведите пример использования данной функции
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 02.08.2008, 18:16   #2
JRcoker
Форумчанин
 
Аватар для JRcoker
 
Регистрация: 18.07.2008
Сообщений: 119
По умолчанию

Код:
function dec2hex(value: dword): string;
const
 hexdigit = '0123456789ABCDEF';
 begin
 while value <> 0 do
 begin
 dec2hex := hexdigit[succ(value and $F)];
 value := value shr 4;
 end;
end;
проде не чё не ругается
Улыбайся...Люди любят идиотов...
JRcoker вне форума Ответить с цитированием
Старый 02.08.2008, 18:25   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

function dec2hex(value: dword): string[8]);
Скобку поставь.
puporev вне форума Ответить с цитированием
Старый 02.08.2008, 18:43   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,219
По умолчанию

Нельзя, что бы функция возвращала значение не описанного типа, т.е. должно заработать так:
type hex = string[8]...
function dec2hex(value: dword): hex;
Кроме того, я бы не делал так: if dec2hex = '' then dec2hex := '0';
Резюмируем:
Код:
type hex = string[8];

function dec2hex(value: dword): hex;
const hexdigit = '0123456789ABCDEF';
begin
  Result := '';
  while value > 0 do
  begin
    Result := hexdigit[succ(value and $F)] + Result;
    value := value shr 4;
  end;
  if Result = '' then Result := '0';
end;
puporev
Какую еще скобку?

P.S. В Делфи есть функция IntToHex
Arigato вне форума Ответить с цитированием
Старый 02.08.2008, 22:48   #5
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Вот она (из Дельфи), похоже ее все таки лучше использовать )
Код:
function IntToHex(Value: Integer; Digits: Integer): string;
//  FmtStr(Result, '%.*x', [Digits, Value]);
asm
        CMP     EDX, 32        // Digits < buffer length?
        JBE     @A1
        XOR     EDX, EDX
@A1:    PUSH    ESI
        MOV     ESI, ESP
        SUB     ESP, 32
        PUSH    ECX            // result ptr
        MOV     ECX, 16        // base 16     EDX = Digits = field width
        CALL    CvtInt
        MOV     EDX, ESI
        POP     EAX            // result ptr
        CALL    System.@LStrFromPCharLen
        ADD     ESP, 32
        POP     ESI
end;
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 03.08.2008, 14:30   #6
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

спасиб))
2 mutabor - приведи, пожалуйста, пример использования IntToHex. Ввожу в Edit1 число, как мне в Edit2 получить его в 16-ом виде? Понять не могу как 16-ый тип данных объявить в программе?
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 03.08.2008, 16:00   #7
JRcoker
Форумчанин
 
Аватар для JRcoker
 
Регистрация: 18.07.2008
Сообщений: 119
По умолчанию

Edit1.Text:=IntToHex(Edit2.text);
Пологаю что так...
Улыбайся...Люди любят идиотов...
JRcoker вне форума Ответить с цитированием
Старый 03.08.2008, 17:22   #8
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,219
По умолчанию

Цитата:
Сообщение от JRcoker
проде не чё не ругается
Цитата:
Сообщение от JRcoker
Edit1.Text:=IntToHex(Edit2.text);
Пологаю что так...
А проверить прежде, чем писать ответ, не надо? Извините, конечно, но Вы даете ответы, которые неверны (уже 2-й раз подряд в этой теме), набивать счетчик сообщений можно в ветке "Свободное общение".

Roof
Примерно так нужно делать:
Код:
Edit2.Text := IntToHex (StrToInt (Edit1.Text), 4);
Второй параметр в функции IntToHex показывает количество шестнадцатеричных цифр результата.
Arigato вне форума Ответить с цитированием
Старый 03.08.2008, 19:40   #9
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

2 Arigato - Спасибо Большое. Работает.
По-моему лучше так работает.
Код:
Edit2.Text:=IntToHex(StrToInt(Edit1.Text),0);
Лишние нули убираются.
Изо всей благодати
В руках крепко сжатых
Я донесу только капли

Последний раз редактировалось Roof; 03.08.2008 в 19:49.
Roof вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация использования оперативной памяти Lkhasa Общие вопросы Delphi 4 04.07.2008 15:22
Примеры использования и выбор лучшей DB BOBAH13 БД в Delphi 4 03.05.2008 22:32
Право использования AlphaControls! Xenofibrius Компоненты Delphi 2 20.04.2008 16:08
что такое 25h и int70h (семестровая) и пример использования R@kot Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 12.12.2007 19:44
Рисование фигур в Delphi7 без использования VCL saintninja Помощь студентам 15 20.10.2007 11:04