![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перевод двоичного кода в символ [XP]
Vladimir © (2012-03-25 13:54:00)Здравствуйте! Каким образом перевести двоичный или шестнадцатеричный код в символ? Есть файл с содержанием типа:
1B252D3132333435 5840504A4C0D0A40 504A4C204649524D 57415245203D4B45
524E454C20202020 2020202020200D0A 2456455256332E30 302E30312E303620
202020204150522D 32362D3230313100 0000000000000000 31303030244B4552
0000000000800000 0300005100030002 0000000000000000 E59FF054E59FF054
E59FF054E59FF054 E59FF054E59FF054 E59FF054E59FF054 E59F0054E59F1054
E59F3054E1500001 0A000003E1510003 3490200434812004 3AFFFFFBE59F103C
E3A02000E1530001 348320043AFFFFFC E1A0F00E00000134 0000011C00000104
000000EC000000D4 000000BC000000A4 0000008C00000F2C 4000800040008000
4000E400E24DD004 E92D0001E3A00101 E590001CE58D0004 E8BD8001E24DD004
E92D0001E3A00101 E5900018E58D0004 E8BD8001E24DD004 E92D0001E3A00101
E5900014E58D0004 E8BD8001E24DD004 E92D0001E3A00101 E5900010E58D0004
E8BD8001E24DD004 E92D0001E3A00101 E590000CE58D0004 E8BD8001E24DD004
E92D0001E3A00101 E5900008E58D0004 E8BD8001E24DD004 E92D0001E3A00101
E5900004E58D0004 E8BD8001E3A00000 E3A01000E3A02000 E3A03000E3A04000
E3A05000E3A06000 E3A07000E3A08000 E3A09000E3A0A000 E3A0B000E3A0C000
E3A0D000E3A0E000 E10F0000E38000C0 E121F000E59F178C E3A00000E5810000
E59F1784E5810000 E59F1780E5810000 E59F177CE5810000 E59F1778E3E00000
E5810000E59F1770 E5810000E59F076C E3A01000E5801000 E59F0764E3A01010
E5801000E3A00000 EE070F17EE080F17 EE110F10E3C00C23 E3C00007E3800080
E3800A01EE010F10 E59F0738E3E0100E E5801000E59F0730 E5901000E3C11601
и так далее. Мне нужно преобразовать этот шеснадцатеричный код в символы. Я так понял для этого нужно сначала преобразовать его в двоичный. Это я вроде понял как сделать. А как затем преобразовать двоичный код в символы?
Sha (2012-03-25 19:47:00) [41]> begin...end © (25.03.12 19:21) [9]
> А что там? Delphi под рукой теперь будет только завтра,
> а любопытство раздирает уже сейчас :)
Все символы из множества ['0'..'f']
считаются правильными двоичными цифрами,
остальные символы считаются неправильными.
Особенно интересно, как затейливо вычисляется
результат в буфере в случае неверных входных данных
begin...end (2012-03-25 19:21:00) [42]> Sha © (25.03.12 18:24) [8]
А что там? Delphi под рукой теперь будет только завтра, а любопытство раздирает уже сейчас :)
Sha (2012-03-25 18:24:00) [43]> begin...end © (25.03.12 16:08) [7]
> В справке (D7) по функции HexToBin есть одна ошибка и одна неточность.
... и одна ошибка в самой функции.
begin...end (2012-03-25 16:08:00) [44]
uses Classes;
var
S, T: string;
L: Integer;
begin
S := '1B252D3132333435 5840504A4C0D0A40 504A4C204649524D 57415245203D4B45';
S := StringReplace(S, ' ', '', [rfReplaceAll]);
L := Length(S) div 2;
SetLength(T, L);
SetLength(T, HexToBin(PChar(S), PChar(T), L));
ShowMessage(T)
end
В справке (D7) по функции HexToBin есть одна ошибка и одна неточность.
Sha (2012-03-25 15:32:00) [45]На самом деле код [3] очень медленный,
он годится только для экспериментов.
Все же имеет смысл прислушаться к [2].
Vladimir (2012-03-25 15:11:00) [46]
> Sha ©
Ваш код помог, спасибо.
Sha (2012-03-25 14:25:00) [47]правильнее
while i<=len do begin;
Sha (2012-03-25 14:23:00) [48]Их там много
procedure TForm1.Button1Click(Sender: TObject);
var
s, t: AnsiString;
i, len, code: integer;
begin
s:='1B252D3132333435 5840504A4C0D0A40 504A4C204649524D 57415245203D4B45';
len:=length(s);
i:=2;
t:='';
while i<len do begin;
if (s[i-1]=' ') or (s[i]=' ') then inc(i)
else begin;
code:=StrToIntDef('$'+copy(s,i-1,2),-1);
if code>=0 then t:=t+AnsiChar(code);
inc(i,2);
end;
end;
ShowMessage(t);
end;
Юрий Зотов (2012-03-25 14:19:00) [49]Есть подозрение на XYZ.
> Мне нужно преобразовать этот шеснадцатеричный код в символы
Допустим, преобразовали (как подсказал RWolf). Но что Вы дальше с этими символами делать будете? Первый же символ - непечатный (Esc), и он явно не один.
RWolf (2012-03-25 14:04:00) [50]откусываешь по 2 символа и применяешь Chr(StrToInt('$' + sym))