Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.226.28.197] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте, подскажите пожалуйста, как можно преобразовать Hex в String?
Нашёл в интернете код преобразования String в Hex, а вот как преобразовать обратно, не могу сообразить... 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. |
Сообщ.
#2
,
|
|
|
Цитата Serega_ @ Здравствуйте, подскажите пожалуйста, как можно преобразовать Hex в String? HEX - это и есть строчное отображение числа. Есть функции IntToHex и StrToInt. var s: String; i: Integer; begin s := '$A0'; i := StrToInt(s); ShowMessage(IntToHex(i,2)); |
Сообщ.
#3
,
|
|
|
Демо
Спасибо, я сделал таким образом: 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. не знаю, грамотно или нет сделал, но работает... |
Сообщ.
#4
,
|
|
|
У самого такая задача встала ну её я решил
всё значительне проще --------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var index:Integer; begin index:=StrToInt('$'+Edit1.Text); Edit2.Text:=IntToStr(index); end; --------------------------------------------------------- Всё работает! А вот как сделать перевод в десятичную и его сложить с десятичной вот это не пойму может кто подскажет.... ---------------------------------------------------- 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. ---------------------------------------------------------- Прошу сильно не пинать.....начинающий Спасибо! |
Сообщ.
#5
,
|
|
|
Цитата vitya @ У самого такая задача встала ну её я решил всё значительне проще Это не та задача В Hex-виде можно представлять не только числа, но и символы произвольной строки - собственно это автор топика и делает, т.е. преобразует строку, скажем '0012' в последовательность Hex-символов '30 30 31 32'. Если же рассматривать '0012' как Hex-число $0012 и преобразовать его к десятичному виду, то получится '18'. Цитата vitya @ А вот как сделать перевод в десятичную и его сложить с десятичной вот это не пойму Как ты говоришь "все значительно проще" //Если десятичное число в Edit2 - целое label1.Caption:=IntToStr(StrToInt('$'+Edit1.Text)+StrToInt(Edit2.Text)); //Если десятичное число в Edit2 может быть вещественным label1.Caption:=FloatToStr(StrToInt('$'+Edit1.Text)+StrToFloat(Edit2.Text)); |
Сообщ.
#6
,
|
|
|
leo
Спасибо попробую.... |
Сообщ.
#7
,
|
|
|
Здравствуйте, возникла проблемка, т.е. если читаю взятые из реестра значения 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 |
Сообщ.
#8
,
|
|
|
Цитата 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 но при применении методов отражения в нужную кодировку .... |
Сообщ.
#9
,
|
|
|
andrew.virus
Спасибо! Всё, что вы сказали про UNICODE, именно так я и делал, но всё равно отображались непонятные символы... Вчитавшись внимательнее в P.S., нашёл у себя ошибку... Теперь всё нормально работает! Ещё раз спасибо! |