Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Нужна помощь в написании программы. Делфи + Ассамл


Автор: ZLOvar 22.12.2009, 21:36
Итак, мне нужно с помощью делфи написать программу, которая показывает значение символов ASCII. Например вводишь в едит символ: "А" (латиница ,на необязательно), а она (прога) в ответ выдает сообщение с его шеснадцатеричным значением. Например:
1.Вводим: "G".
2.Нажимаем кнопку "Показать".
3.Выводится сообщение с чистым шеснадцатеричным значением "G". В данном случае это: "47".

Так вот, я прописал все, кроме самого главного! А именно этого способа вывода ASCII значения символа. Как это лучше сделать? Мож с помощью асма? Но просто я не знаю как это делать, ни с помощью асма, ни с помощью делфи)) Кто поможет? У кого какие предложения? Заранее всем ОГРОМНОЁ спасибо! smile 

Пробывал с Помощью функции Ord, не помогло. Мне нужно немного иное. 

Автор: kami 22.12.2009, 21:50
А чем Ord не устраивает? Чем оно не то?
Код

ShowMessage(IntToStr(Ord(Edit1.Text[1])));

Автор: amsoft 22.12.2009, 21:55
Код

IntToHex(ord('G'),0)

Автор: ZLOvar 22.12.2009, 21:56
kami, 
Вводим "G" нажимаем кнопку, получаем: 71, а П в шестнадцатеричном виде не 71 а 47! Вот этим и не устраивает.

Автор: Данкинг 22.12.2009, 21:58
Цитата(ZLOvar @  22.12.2009,  21:36 Найти цитируемый пост)
Пробывал с Помощью функции Ord, не помогло. Мне нужно немного иное. 

Не совсем понял, что надо. Ну вот же и выводится код символа:
Код

procedure TForm1.FormCreate(Sender: TObject);
begin
 showmessage(inttostr(ord('G')));
end;


Цитата(ZLOvar @  22.12.2009,  21:36 Найти цитируемый пост)
3.Выводится сообщение с чистым шеснадцатеричным значением "G". В данном случае это: "47".

Или именно в шестнадцатеричном виде надо? Тогда перекодируем:
Код

function Dec2X(const Value, Base: Cardinal): string;



// Функция возвращает символ, соответствующий числу в N-ричной системе

function GetChar(const N: Cardinal): Char;

begin

   if N < 10 then

     // для систем счисления от 1 до 10

     Result := Char(N + Ord('0'))

   else

     // для систем счисления выше 10, но не больше 36 ([0..9] + ['A'..'Z'])

     Result := Char(N - 10 + Ord('A'));

end;

 

var

V, R: Cardinal;

begin

Result := '';

 

if Base <= 1 then

begin

   // числа можно и в системе, состоящей из одного символа, представлять ;)

   if Base = 1 then

   begin

     // реализуем это

     SetLength(Result, Value);

     FillChar(Result[1], Value, Ord('0'));

     Exit;

   end else

     // а вот других систем счисления быть не может

     raise EConvertError.Create('Основание системы счисления должно быть больше 0');

end else

   // ограничиваем представление систем счисления 10-ю цифрами и 26-ю буквами

   // английского алфавита

   if Base > 10 + (Ord('Z') + 1) - Ord('A') then

     raise EConvertError.Create('Основание системы счисления должно лежать в пределах от 1 до 36');

 

// Выполняем преобразование в нужную систему виртуальным делением в столбик

V := Value;

repeat

   R := V mod Base;

   V := V div Base;

   Result := GetChar(R) + Result;

until V < 2; // 2 - минимальная база,

              // то есть в любом случае когда-то "V div Base" будет равно 1

if V <> 0 then Result := IntToStr(V) + Result;

end;
...

procedure TForm1.FormCreate(Sender: TObject);
begin
showmessage(Dec2X(ord('G'),16));
end;

Автор: ZLOvar 22.12.2009, 22:00
amsoft, 
О! то что надо .только можно ли его как нибудь прикрепить к Edit1.Text? Сам пробывал .не выходит. Пишет что различные типы.

Добавлено через 4 минуты
Данкинг, 
amsoft, 
Все просто прекрасно, но только мне нужно как нибудь привязать его к Edit1.Text. Ато он мне только один символ "G" в 16-ричной системе выдает.

Автор: amsoft 22.12.2009, 22:05
Код

procedure TForm1.Button1Click(Sender: TObject);
var
X: integer;
S: string;
begin
S := '';
for X := 1 to Length(Edit1.Text) do
    S := S + IntToHex(Ord(Edit1.Text[X]),0) + ' ';
ShowMessage(S);
end;

Автор: chip_and_dayl 22.12.2009, 22:07
Код

Label1.Caption:=string(inttoHex(ord(Edit1.Text[1]),0));

Извиняюсь за извращение с переобразованиямиsmile

Добавлено через 1 минуту и 51 секунду
Данкинг
Пожалей мозги нам юзерам smile

Автор: ZLOvar 22.12.2009, 22:12
amsoft, 
chip_and_dayl, 
Данкинг, 

Все пошло! smile  smile  smile  smile  Спасибо вам огромное, ребята! Модератор ,поставьте пожалуйста этим трем кул программистам плюсы)) +++

Автор: chip_and_dayl 22.12.2009, 22:12
amsoft
Кажись это IntToHex(Ord(Edit1.Text[X]),0) нужно к стрингу привести

Автор: amsoft 22.12.2009, 22:16
chip_and_dayl, 
IntToHex выдает результат в "стрингах"  smile 

Автор: chip_and_dayl 22.12.2009, 22:21
Точно, что-то я где-то ...

Автор: Данкинг 22.12.2009, 22:33
chip_and_dayl, это не моя функция, это я в DelphiWorld нашёл. smile 

Автор: ZLOvar 22.12.2009, 22:49
Данкинг, 
chip_and_dayl, 
amsoft, 
Все равно всем спасибо. Все работает! За плюсы я вам ручаюсь! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)