|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как правильно перевести String и Integer в HEX
Здравствуйте! Возникла проблема! Есть программа, она считывает информацию из TXT, конвертирует ее в HEX и записывает в Memo1. Но вот проблема:в файле есть как слова, так и цифры. Слова программа правильно конвертирует, а цифры - нет. Вот сайт, где указаны данные и их перевод(служит мне примером) https://ccrma.stanford.edu/courses/4...ts/WaveFormat/ именно эта картинка https://ccrma.stanford.edu/courses/4...wave-bytes.gif Как сделать, что бы в Memo1 было так, как на рисунке?:
52 49 46 46 24 08 00 00 57 41 56 45 66 6d 74 20 10 00 00 00 01 00 02 00 22 56 00 00 88 58 01 00 04 00 10 00 64 61 74 61 00 08 00 00 00 00 00 00 А не так: 52 49 46 46 0D 0A 32 30 38 34 0D 0A 57 41 56 45 0D 0A 66 6D 74 20 0D 0A 31 36 0D 0A 31 0D 0A 32 0D 0A 32 32 30 35 30 0D 0A 38 38 32 30 30 0D 0A 34 0D 0A 31 36 0D 0A 64 61 74 61 0D 0A 32 30 34 38 0D 0A Ясное дело цифры могут быть разными, но это пример. Вот код программы: Код:
unit Unit1; interface uses SysUtils, Classes, Controls, Forms, StdCtrls, Dialogs, sSkinManager, sButton, sMemo, sLabel, sEdit; type TForm1 = class(TForm) OpenDialog1: TOpenDialog; sSkinManager1: TsSkinManager; sButton2: TsButton; sLabel1: TsLabel; sEdit1: TsEdit; sMemo1: TsMemo; sButton1: TsButton; procedure sButton1Click(Sender: TObject); procedure sButton2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.sButton2Click(Sender: TObject); var F:file of byte; z:byte; s:string; i:integer; begin sMemo1.Clear; s:=''; i:=0; assignfile(F, sEdit1.Text); reset(F); while not eof(F) do begin read(F,z);s:=s+IntToHex(z,2)+' '; i:=(i+1) mod 16; if (i=0) or eof(F) then begin sMemo1.Lines.Add(s); s:=''; end; end; end; procedure TForm1.sButton1Click(Sender: TObject); begin with OpenDialog1 do if Execute then sEdit1.Text:=FileName; end; end. P.S. Использую компонент AlphaControls, но можно и без него, если вам не удобно. Он для интерфейса. Программа в целом внизу. |
#2
|
||||
|
||||
Цитата:
Обрати внимание, выдаёт тоже, что и твоя программа. Или по-твоему Far Manager тоже неправильно работает? |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Dmitry_DM (09.08.2012)
|
#3
|
||||
|
||||
Всё дело портит строка
Код:
sMemo1.Lines.Add(s); Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#4
|
||||
|
||||
Цитата:
Вот его содержимое PHP код:
|
#5
|
||||
|
||||
На днях на работе набросал для себя вьювер бинарный, если завтра вспюмню выложу код.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
Этот пользователь сказал Спасибо Aristarh Dark за это полезное сообщение: | ||
Dmitry_DM (09.08.2012)
|
#6
|
|||
|
|||
Цитата:
|
#7
|
|||
|
|||
Цитата:
|
#9
|
||||
|
||||
Цитата:
Цитата:
|
#10
|
||||
|
||||
Вот для примера.
На убогость не смотреть, мне этого хватило. Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#11
|
|||
|
|||
Цитата:
|
#12
|
||||
|
||||
Исходник не видел, каюсь, но могу предположить, что там используется IntToHex. Если это так, то возможно нужно использовать её так: int:=StrToInt('$' + IntToHex(byte, 2));
|
#13
|
|||
|
|||
Цитата:
|
#14
|
||||
|
||||
Добавьте в функцию HexToStr() строчку:
Код:
{функция преобразования HEX -> строка} function TForm1.HexToStr(hex: string): string; var i: Integer; begin hex:= StringReplace(hex, ' ', '', [rfReplaceAll]); // вот эту hex:= StringReplace(hex, #13 , '', [rfReplaceAll]); for i:= 1 to Length(hex) div 2 do Result:= Result + Char(StrToInt('$' + Copy(hex, (i-1) * 2 + 1, 2))); end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |