На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Преобразовать Hex в String
    Здравствуйте, подскажите пожалуйста, как можно преобразовать Hex в String?
    Нашёл в интернете код преобразования String в Hex, а вот как преобразовать обратно, не могу сообразить...
    ExpandedWrap disabled
      unit Unit1;
       
      interface
       
      uses
        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
        Dialogs, StdCtrls;
       
      type
        TForm1 = class(TForm)
          btn1: TButton;
          edt1: TEdit;
          edt2: TEdit;
          function StrToHex(source: string): string;
          procedure btn1Click(Sender: TObject);
        private
          { Private declarations }
        public
          { Public declarations }
        end;
       
      var
        Form1: TForm1;
       
      implementation
       
      {$R *.dfm}
       
      {функция преоброзования строки -> HEX }
      function TForm1.StrToHex(source: string): string;
      var
        i: Integer;
        c: Char;
        s: string;
      begin
        s := '';
        for i:=1 to Length(source) do begin
          c := source[i];
          s := s +  IntToHex(Integer(c), 2) + ' ';
        end;
        result := s;
      end;
       
      procedure TForm1.btn1Click(Sender: TObject);
      begin
        edt2.Text := StrToHex(edt1.Text);
      end;
       
      end.
      Цитата Serega_ @
      Здравствуйте, подскажите пожалуйста, как можно преобразовать Hex в String?


      HEX - это и есть строчное отображение числа.

      Есть функции IntToHex и StrToInt.

      ExpandedWrap disabled
        var
          s: String;
          i: Integer;
        begin
          s := '$A0';
          i := StrToInt(s);
          ShowMessage(IntToHex(i,2));
        Демо
        Спасибо, я сделал таким образом:
        ExpandedWrap disabled
          unit Unit1;
           
          interface
           
          uses
            SysUtils, Classes, Controls, Forms, StdCtrls;
           
          type
            TForm1 = class(TForm)
              btn1: TButton;
              edt1: TEdit;
              edt2: TEdit;
              btn2: TButton;
              edt3: TEdit;
              function StrToHex(source: string): string;
              function HexToStr(hex: string): string;
              procedure btn1Click(Sender: TObject);
              procedure btn2Click(Sender: TObject);
            private
              { Private declarations }
            public
              { Public declarations }
            end;
           
          var
            Form1: TForm1;
           
          implementation
           
          {$R *.dfm}
           
          {функция преоброзования строки -> HEX }
          function TForm1.StrToHex(source: string): string;
          var
            i: Integer;
            c: Char;
            s: string;
          begin
            s := '';
            for i:=1 to Length(source) do begin
              c := source[i];
              s := s +  IntToHex(Integer(c), 2) + ' ';
            end;
            result := s;
          end;
           
          {функция преоброзования HEX -> строка}
          function TForm1.HexToStr(hex: string): string;
          var
            i: Integer;
          begin
            hex:= StringReplace(hex, ' ', '', [rfReplaceAll]);
            for i:= 1 to Length(hex) div 2 do
              Result:= Result + Char(StrToInt('$' + Copy(hex, (i-1) * 2 + 1, 2)));
          end;
           
          procedure TForm1.btn1Click(Sender: TObject);
          begin
            edt2.Text := StrToHex(edt1.Text);
          end;
           
          procedure TForm1.btn2Click(Sender: TObject);
          begin
            edt3.Text:= HexToStr(edt2.Text);
          end;
           
          end.

        не знаю, грамотно или нет сделал, но работает... :yes:
          У самого такая задача встала ну её я решил
          всё значительне проще
          ---------------------------------------------------------
          procedure TForm1.Button1Click(Sender: TObject);
          var
          index:Integer;
          begin
          index:=StrToInt('$'+Edit1.Text);
          Edit2.Text:=IntToStr(index);
          end;
          ---------------------------------------------------------
          Всё работает!

          А вот как сделать перевод в десятичную и его сложить с десятичной вот это не пойму :wall:
          может кто подскажет....
          ----------------------------------------------------
          procedure TForm1.Button1Click(Sender: TObject);
          var
          r1,r2: real; // слагаемые
          r: real; // вывод
          i:Integer;
          begin
          // получить исходные данные
          r1 := StrToFloat(Edit1.Text);
          r2 := StrToFloat(Edit2.Text);

          begin
          i:=StrToInt('$'+ Edit1.Text);
          r:=IntToStr(i);

          s:=r1+r2

          label1.Caption := FloatToStr(s);

          end;
          end.
          ----------------------------------------------------------
          Прошу сильно не пинать.....начинающий
          Спасибо!
          Сообщение отредактировано: vitya -
            Цитата vitya @
            У самого такая задача встала ну её я решил
            всё значительне проще

            Это не та задача ;) В Hex-виде можно представлять не только числа, но и символы произвольной строки - собственно это автор топика и делает, т.е. преобразует строку, скажем '0012' в последовательность Hex-символов '30 30 31 32'. Если же рассматривать '0012' как Hex-число $0012 и преобразовать его к десятичному виду, то получится '18'.

            Цитата vitya @
            А вот как сделать перевод в десятичную и его сложить с десятичной вот это не пойму

            Как ты говоришь "все значительно проще" ;)
            ExpandedWrap disabled
              //Если десятичное число в Edit2 - целое
              label1.Caption:=IntToStr(StrToInt('$'+Edit1.Text)+StrToInt(Edit2.Text));
               
              //Если десятичное число в Edit2 может быть вещественным
              label1.Caption:=FloatToStr(StrToInt('$'+Edit1.Text)+StrToFloat(Edit2.Text));
              leo
              Спасибо попробую....
                Здравствуйте, возникла проблемка, т.е. если читаю взятые из реестра значения REG_MULTI_SZ, то цифры и английские буквы читаются правильно, а если попадается русские буквы, то замес-то них, появляются разные символы... :(
                В чём может быть проблема?

                Пример:
                47,00,42,00,54,00,20,00,20,00,20,00,20,00,2d,00,20,00,34,00,32,00,33,00,30,00,32,00,65,00,33,00,31
                здесь всё нормально конвертируется как:
                GBT - 42302e31
                а вот этот:
                1f,04,30,04,3c,04,4f,04,42,04,4c,04
                Должно быть - Память, а отображается - 0 < O B L
                  Цитата Serega_ @
                  Здравствуйте, возникла проблемка, т.е. если читаю взятые из реестра значения REG_MULTI_SZ, то цифры и английские буквы читаются правильно, а если попадается русские буквы, то замес-то них, появляются разные символы...
                  В чём может быть проблема?

                  Пример:
                  47,00,42,00,54,00,20,00,20,00,20,00,20,00,2d,00,20,00,34,00,32,00,33,00,30,00,32,00,65,00,33
                  ,00,31
                  здесь всё нормально конвертируется как:
                  GBT - 42302e31
                  а вот этот:
                  1f,04,30,04,3c,04,4f,04,42,04,4c,04
                  Должно быть - Память, а отображается - 0 < O B L

                  всё объясняется тем, что значения в реестре хранятся как UNICODE-данные и потому, чтобы русский текст выглядел нормально после преобразования HEX-значения найденное значение нужно перевести в кодировку ANSI, например, используя методы описанные в этой теме ...

                  з.ы.: данные для перобразования преобразуются локально, используя TUnicodeStrings, как обычный тип TStrings но при применении методов отражения в нужную кодировку ....
                  Сообщение отредактировано: andrew.virus -
                    andrew.virus
                    Спасибо!
                    Всё, что вы сказали про UNICODE, именно так я и делал, но всё равно отображались непонятные символы...
                    Вчитавшись внимательнее в P.S., нашёл у себя ошибку... Теперь всё нормально работает!
                    Ещё раз спасибо!
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0301 ]   [ 16 queries used ]   [ Generated: 8.05.24, 19:43 GMT ]