Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2008, 09:28   #1
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию Байты в стринги

Есть бинарный файл.
При чтении первого байта в определённом адресе, текст отображается хорошо. Вот код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
f:TFileStream;
s:Byte;
begin
f:=TFileStream.Create(ExtractFilePath(application.ExeName)+'123.dat', fmOpenReadWrite);
f.Seek($000050, 1);
f.Read(s, 1);
Edit1.Text:=Char(s);
f.Free;
end;
Но если попробывать так же прочитать второй байт (f.Seek($000050, 1)(заведомо зная что там тоже находиться символ), то он его не выдает, а пишет какой иероглиф. Как быть?
Заранее благодарен.
P.S. Поиск по форуму не дал результатов.
FaTaL вне форума Ответить с цитированием
Старый 18.04.2008, 09:50   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А ты сравни байты считываемого и нужного символа.
Кстати Эдит не каждый символ выводит.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.04.2008, 10:52   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

полностью согласен со Stilet.

Кстати, read и так, имхо, перемещает указатель на следующий байт...
попробуй такой код, вместо своего:
Код:
  f.Seek($000050, 1);
  f.Read(s, 1);
  Edit1.Text := 'byte1 = ' + IntToStr(s);
  {читаем следующий байт}
  f.Read(s, 1);
  Edit1.Text := Edit1.Text + ' byte2 = ' + IntToStr(s);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.04.2008, 11:15   #4
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
полностью согласен со Stilet.

Кстати, read и так, имхо, перемещает указатель на следующий байт...
попробуй такой код, вместо своего:
Код:
  f.Seek($000050, 1);
  f.Read(s, 1);
  Edit1.Text := 'byte1 = ' + IntToStr(s);
  {читаем следующий байт}
  f.Read(s, 1);
  Edit1.Text := Edit1.Text + ' byte2 = ' + IntToStr(s);
Попробывал, работает. Спасибо.
А как мне прочитать сразу несколько байт, например 6 первых байт?
FaTaL вне форума Ответить с цитированием
Старый 18.04.2008, 12:10   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А вы разберитесь, что за параметр в виде единички в f.Read(s, 1);
Нельзя же заниматься программированием по принципу мартышки с очками из знаменитой басни Крылова...
mihali4 вне форума Ответить с цитированием
Старый 18.04.2008, 13:49   #6
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Единичка это сколько байт будет прочитано. Т.е. если я поставлю 6, то S надо обьявлять массивом, но тогда компилятор ругается на строчку Edit1.Text := 'byte1 = ' + IntToStr(s);
FaTaL вне форума Ответить с цитированием
Старый 18.04.2008, 14:41   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну да и видимо ошибка на китайском.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.04.2008, 14:42   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
S надо обьявлять массивом, но тогда компилятор ругается на строчку Edit1.Text := 'byte1 = ' + IntToStr(s);
А как к элементам массива обращаться следует? Пра-а-а-вильно, S[I]...
mihali4 вне форума Ответить с цитированием
Старый 18.04.2008, 15:12   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я чет не понял что мешает определить s как array[0..6] of char ?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.04.2008, 15:46   #10
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Всем спасибо.
FaTaL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите заменить байты в файле Dax Общие вопросы Delphi 3 21.06.2007 10:24