Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.08.2012, 18:35
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию Как правильно перевести 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, но можно и без него, если вам не удобно. Он для интерфейса.
Программа в целом внизу.
Вложения
Тип файла: rar String to HEX.rar (463.1 Кбайт, 16 просмотров)
Ответить с цитированием
  #2  
Старый 09.08.2012, 21:35
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Dmitry_DM
Здравствуйте! Возникла проблема! Есть программа, она считывает информацию из 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

Ясное дело цифры могут быть разными, но это пример.
Вот код программы:
...
Помогите, пожалуйста, отредактируйте ту процедуру, дело в ней, наверное. В общем не оставьте меня без помощи!
P.S. Использую компонент AlphaControls, но можно и без него, если вам не удобно. Он для интерфейса.
Программа в целом внизу.
Не ври. Правильно твоя программа работает. Вот что отображает Far Manager если им открыть твой файл "Information from the WAV file.txt":


Обрати внимание, выдаёт тоже, что и твоя программа. Или по-твоему Far Manager тоже неправильно работает?
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Dmitry_DM (09.08.2012)
  #3  
Старый 09.08.2012, 21:44
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Всё дело портит строка
Код:
sMemo1.Lines.Add(s); 
она добавляет в конце 0D 0A - символы перевода строки.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #4  
Старый 09.08.2012, 21:59
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от angvelem
Всё дело портит строка
Код:
sMemo1.Lines.Add(s); 
она добавляет в конце 0D 0A - символы перевода строки.
Не, эта строка просто выводит результат. А символы 0D 0A уже есть в исходном файле с именем "Information from the WAV file.txt".
Вот его содержимое
PHP код:
RIFF
2084
WAVE
fmt 
16
1
2
22050
88200
4
16
data
2048 
Т.е. каждый перевод строки это и есть те самые 0D 0A которые в результате "конвертации ее в HEX" выводит инструкция sMemo1.Lines.Add(s);
Ответить с цитированием
  #5  
Старый 09.08.2012, 22:24
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

На днях на работе набросал для себя вьювер бинарный, если завтра вспюмню выложу код.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
Этот пользователь сказал Спасибо Aristarh Dark за это полезное сообщение:
Dmitry_DM (09.08.2012)
  #6  
Старый 09.08.2012, 23:01
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от poli-smen
Не ври. Правильно твоя программа работает. Вот что отображает Far Manager если им открыть твой файл "Information from the WAV file.txt":


Обрати внимание, выдаёт тоже, что и твоя программа. Или по-твоему Far Manager тоже неправильно работает?
Да, действительно правильно. Спасибо. Значит на картинке что то еще считывается? Эта инфа из WAV (только заголовок). Что по этому поводу можете сказать?
Ответить с цитированием
  #7  
Старый 09.08.2012, 23:01
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от Aristarh Dark
На днях на работе набросал для себя вьювер бинарный, если завтра вспюмню выложу код.
Спасибо! Буду ждать!
Ответить с цитированием
  #8  
Старый 09.08.2012, 23:52
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

А чего ждать, используй FAR или возьми здесь.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #9  
Старый 10.08.2012, 02:50
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Dmitry_DM
Да, действительно правильно. Спасибо. Значит на картинке что то еще считывается? Эта инфа из WAV (только заголовок). Что по этому поводу можете сказать?
По этому поводу я могу сказать что
Цитата:
Сообщение от Dmitry_DM
что бы в 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
- нужно открывать своей программой wav-файл, а не тот txt-файл.
Ответить с цитированием
  #10  
Старый 10.08.2012, 09:48
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Вот для примера.
На убогость не смотреть, мне этого хватило.
Вложения
Тип файла: 7z form.7z (1.9 Кбайт, 14 просмотров)
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #11  
Старый 10.08.2012, 10:40
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от poli-smen
По этому поводу я могу сказать что- нужно открывать своей программой wav-файл, а не тот txt-файл.
Вот за это спасибо ОГРОМНОЕ! Так работает правильно. С помощью еще одной моей программы можно переделать HEX в двоичный код и это и будут мои искомые данные! Но вот опять проблема: эта программа выдает ошибку, что типа не может распознать символ $. Но этого символа нету в данных с WAV. Как эту проблему решить? Вот эта программа-переводчик.
Вложения
Тип файла: rar Программы.rar (636.4 Кбайт, 11 просмотров)
Ответить с цитированием
  #12  
Старый 10.08.2012, 14:29
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Исходник не видел, каюсь, но могу предположить, что там используется IntToHex. Если это так, то возможно нужно использовать её так: int:=StrToInt('$' + IntToHex(byte, 2));
Ответить с цитированием
  #13  
Старый 12.08.2012, 00:09
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от Alegun
Исходник не видел, каюсь, но могу предположить, что там используется IntToHex. Если это так, то возможно нужно использовать её так: int:=StrToInt('$' + IntToHex(byte, 2));
Пожалуйста, посмотрите исходник, поправьте там что-то, чтобы инфа перевелась из HEX в обычный код из приложенного TXT файла.
Вложения
Тип файла: txt Information from the WAV file.txt (8.9 Кбайт, 4 просмотров)
Ответить с цитированием
  #14  
Старый 12.08.2012, 04:48
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Добавьте в функцию 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;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:27.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter