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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2013, 13:40   #1
grib_aga
Пользователь
 
Регистрация: 09.01.2013
Сообщений: 20
По умолчанию Не получается сравнить прочитанный байт с эталоном

Написал вот так, не работает:
Читаю первый байт в строку(буфер) и пытаюсь его сравнить с байтом, записанным заранее:

PHP код:
var    nbstring;  
        
FileFromFileToTFileStream;
 
        
FileFrom := TFileStream.Create('filefrom.txt'fmOpenRead);
        
FileTo := TFileStream.Create('outfile.txt'fmCreate);
        
FileFrom.ReadBuffer(n1);
        
:= 'мое значение';
        if 
b then Exit; 
Прыгал всяко-разно, но либо ошибки Access violation и Runtime Error, либо сравнение не валид.
Как исправить?
grib_aga вне форума Ответить с цитированием
Старый 18.03.2013, 14:04   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Дык n и b объявить как Byte. Читать в String таким способом не получится
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.03.2013, 14:10   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
FileFrom.ReadBuffer(n, 1);
Вы реально хотите прочитать 1 байт в строку n ?
Тогда это нужно делать так:
Код:
        FileTo := TFileStream.Create('outfile.txt', fmCreate);

        SetLength(n, 1); {выделим место в памяти под 1 символ}
        FileFrom.ReadBuffer(n[1], 1);

Кстати,
Цитата:
Код:
        b := 'мое значение';
        if n = b then Exit;
всегда будет Exit - один символ НИ КАК не может быть равен 12 символам ('мое значение')


p.s. И ещё, ВАЖНО!
Вы явно не учитываете какую кодировку имеет файл filefrom.txt
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.03.2013, 14:58   #4
grib_aga
Пользователь
 
Регистрация: 09.01.2013
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы реально хотите прочитать 1 байт в строку n ?
Спасибо. Да, желательно в строку или в инт.

У меня есть файл, в котором записана некоторая информация, все равно какая. Мне нужно взять первый байт из этого файла и сравнить его с эталоном. Например, есть текстовый файл, с содержимым 'MyDocument'(текст в документе без ковычек) и эталон - переменная, содержащая в себе байт(01001101). Нужно сравнить первый байт из файла и этот эталон на соответствие.
Выручай)
grib_aga вне форума Ответить с цитированием
Старый 18.03.2013, 15:11   #5
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Ну так объяви эти переменные как byte, записывай в них значения и сравнивай. Вроде весь сам написал в первом посте.
FaTaL вне форума Ответить с цитированием
Старый 18.03.2013, 15:30   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Аватар
Дык n и b объявить как Byte.
Цитата:
Сообщение от FaTaL
Ну так объяви эти переменные как byte, записывай в них значения и сравнивай. Вроде весь сам написал в первом посте.
Цитата:
Сообщение от grib_aga
Мне нужно взять первый байт из этого файла и сравнить его с эталоном.
дык,
Код:
var    n, b : byte;  
...
        try
           FileFrom := TFileStream.Create('filefrom.txt', fmOpenRead);

           FileFrom.ReadBuffer(n, 1);
           b := 77; { 01001101b = $4D = 77 }
           if n = b then Exit;  
           ...
           <... тут действия, если не совпали байты ...>
      finally
           FileFrom.Free; {обязательно освободим память и закроем хендл открытого файла!}
      end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.03.2013, 15:41   #7
grib_aga
Пользователь
 
Регистрация: 09.01.2013
Сообщений: 20
По умолчанию

Serge_Bliznykov, Спасибо! Не подскажешь как теперь разложить байт на биты(например, в целочисленный массив) или перевести его в бинарное представление?
grib_aga вне форума Ответить с цитированием
Старый 18.03.2013, 15:56   #8
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Вот тут есть его же код:
http://www.programmersforum.ru/showp...27&postcount=2
FaTaL вне форума Ответить с цитированием
Старый 18.03.2013, 15:59   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

FaTaL, спасибо за помощь!

grib_aga, ну, это же классическая задача, на форуме решалась over9000 раз!

например, через такую функцию:
Код:
function IntToBin(Value: Longint; Digits, Spaces: Integer): string;
begin
  Result := '';
  if Digits > 32 then
    Digits := 32;
  while Digits > 0 do
  begin
    if (Digits mod Spaces) = 0 then
      Result := Result + ' ';
    Dec(Digits);
    Result := Result + IntToStr((Value shr Digits) and 1);
  end;
end;
на входе десятичное число, на выходе - двоичное представление.
Digits - сколько цифр нужно получить в выходном двоичном числе.
Spaces - через сколько двоичных цифр вставлять пробел (если нужно число представить группами)

Последний раз редактировалось Serge_Bliznykov; 18.03.2013 в 16:02.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.03.2013, 16:13   #10
grib_aga
Пользователь
 
Регистрация: 09.01.2013
Сообщений: 20
По умолчанию

Цитата:
Сообщение от FaTaL Посмотреть сообщение
Вот тут есть его же код:
http://www.programmersforum.ru/showp...27&postcount=2
Спасибо! Но я тупой.

PHP код:

  
for i:=8 downto 1 do begin
    b
[i] := (and 1);
    
:= A shr 1;
  
end
var A: Byte;
i: integer;
b: array of ... ? Битов? Мне нужен целочисленный массив.
grib_aga вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Народ не получается с задачей в c++! Ни как не получается даже начать! дайте решение,хотя бы набросайте чего нибудь! sonat Помощь студентам 2 30.05.2012 08:27
байт диагностики Dimasik73 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 02.03.2012 23:41
Не получается принять TCP/IP пакет более 2048 байт. Visual C++ Gvaler C/C++ Сетевое программирование 3 28.09.2011 23:00
Найти байт максимальным количестов единиц и байт с максмальным количеством нулей и разность (ассемблер) Beren42 Помощь студентам 0 15.12.2010 20:32
Поиск байт Gerzs Общие вопросы Delphi 9 06.11.2009 17:28