Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.19;
Скачать: CL | DM;

Вниз

Чтение байтов из файла   Найти похожие ветки 

 
8ung   (2004-08-31 11:26) [0]

Как читать байты из файла, сохраняя их последоватьльность?
Например:
В файле первые четыре байта - $08 $58 $49 $FC
При счтитывании этих четырех байт возвращается $FC495808(так ка и должно быть), а мне нужно, чтобы возвращалось $085849FC.


 
MetalFan ©   (2004-08-31 11:28) [1]

а как ты читаешь?


 
MU ©   (2004-08-31 11:29) [2]

как, куда, откуда читаете?


 
Ega23 ©   (2004-08-31 11:29) [3]

Скорее всего ты читаешь их как Integer. Читай как byte/


 
Reindeer Moss Eater ©   (2004-08-31 11:29) [4]

Читать надо так же как и пишешь, тогда все будет сохраняться.


 
8ung   (2004-08-31 11:42) [5]

Я читаю в ^integer.
Читать их в PByteArray/byte - тоже не выход, потом по одно му склеивать придется.


 
Reindeer Moss Eater ©   (2004-08-31 11:43) [6]

Читаешь в интегер - значит и пиши из него.


 
8ung   (2004-08-31 11:46) [7]

var
 buffer : integer^;
begin
   GetMem(buffer, 4);
   fil := FileOpen(Edit1.Text, OF_READ);
   FileRead(fil, buffer^, 4);
   FileClose(fil);
   FreeMem(buffer, 4);


 
8ung   (2004-08-31 11:47) [8]

var
 buffer : integer^;
 fil : integer;
begin
   GetMem(buffer, 4);
   fil := FileOpen(Edit1.Text, OF_READ);
   FileRead(fil, buffer^, 4);
   FileClose(fil);
   FreeMem(buffer, 4);


 
Reindeer Moss Eater ©   (2004-08-31 11:48) [9]

Во первых зачем буфер, если читать можно прямо в переменную integer?
Во вторых где код записи?


 
8ung   (2004-08-31 11:50) [10]


> Reindeer Moss Eater ©   (31.08.04 11:43) [6]
> Читаешь в интегер - значит и пиши из него.

При чем тут запись?
Если в файле первые четыре байта $08 $58 $49 $FC и мне нужно получить число $085849FC, но при стандартном чтении получаю $FC495808.


 
Reindeer Moss Eater ©   (2004-08-31 11:51) [11]

Сникерсни и поймешь при чем здесь запись.


 
8ung   (2004-08-31 11:52) [12]


> Reindeer Moss Eater ©   (31.08.04 11:48) [9]
> Во первых зачем буфер, если читать можно прямо в переменную
> integer?
> Во вторых где код записи?

У меня дальше пойдет чтение блоков по 10-16 байт, а в интегер это не засунешь(всего 8 байт)...


 
Reindeer Moss Eater ©   (2004-08-31 11:53) [13]

Тогда почему работаешь с блоками и перемеными длиной 4 байта?


 
8ung   (2004-08-31 11:53) [14]

Неужели никто не поможет?


 
Reindeer Moss Eater ©   (2004-08-31 11:55) [15]

Код записи этих байтов в файл где?
Не тормози.
Сникерсни!


 
8ung   (2004-08-31 11:58) [16]


> Reindeer Moss Eater ©   (31.08.04 11:55) [15]
> Код записи этих байтов в файл где?
> Не тормози.
> Сникерсни!

Если кто тормозит, так это ты...
Я читаю посторонний файл!!! Не я пишу туда.


 
5 копеек   (2004-08-31 11:59) [17]

Тип Integer не 8 Byte, а 4.

Кроме того, вероятно ты что-то путаешь с представлением байтов. Посмотри внимательно, скорее всего у тебя байты перевёрнуты попарно, а не все четыре.


 
8ung   (2004-08-31 12:05) [18]


> Тип Integer не 8 Byte, а 4.

Путал...

> Кроме того, вероятно ты что-то путаешь с представлением
> байтов. Посмотри внимательно, скорее всего у тебя байты
> перевёрнуты попарно, а не все четыре.

Перевернуты все четыре и я ничего не путаю. Так оно и должно быть.


 
Vitaly ©   (2004-08-31 12:54) [19]


> У меня дальше пойдет чтение блоков по 10-16 байт, а в интегер
> это не засунешь(всего 8 байт)...

и при чем здесь значение инта?


 
Reindeer Moss Eater ©   (2004-08-31 12:59) [20]

Возьми word
Прочитай в него первые два байта
Сдвинь влево на 16 бит.
Прочитай вторые два байта.


 
П7   (2004-08-31 13:03) [21]

Читай из потока... TFileStream...


 
Ega23 ©   (2004-08-31 13:21) [22]

Tiff ковыряешь?


 
Digitman ©   (2004-08-31 13:38) [23]


> 8ung


читай как читаешь, т.е. в Integer, и тут же пользуй для изменения порядка следования байт прочитанного значения ф-цию htonl() из состава Winsock, если уж так тяжко реализовать этот примитивный алгоритм самостоятельно


 
5 копеек   (2004-08-31 13:54) [24]


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls, Grids;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   StringGrid1: TStringGrid;
   OpenDialog1: TOpenDialog;
   procedure Button2Click(Sender: TObject);
   procedure Button1Click(Sender: TObject);
 private
   { Private-Deklarationen }
 public
   { Public-Deklarationen }
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button2Click(Sender: TObject);
begin
 Close;
end;

procedure TForm1.Button1Click(Sender: TObject);
var Datei: file of byte;
   Zeichen: Byte;
   iSpalte, iDeltSpalte, iZeile: integer;
   TmpStr: string;
begin
 if OpenDialog1.Execute then
 begin
   AssignFile(Datei,OpenDialog1.FileName);
   Reset(Datei);
   try
     iSpalte := 0;
     iDeltSpalte := 0;
     iZeile := 0;
     while not Eof(Datei) do
     begin
    BlockRead(Datei,Zeichen,1);
       TmpStr := IntToHex(Zeichen,1);
       if Length(TmpStr) < 2 then
         TmpStr := "0" + TmpStr;
       StringGrid1.Cells[iSpalte + iDeltSpalte,iZeile] := TmpStr;
       if iSpalte < 3 then
         Inc(iSpalte)
       else begin
         iSpalte := 0;
         if iDeltSpalte < 20 then
           iDeltSpalte := iDeltSpalte + 5
         else begin
           iDeltSpalte := 0;
           Inc(iZeile);
           StringGrid1.RowCount := StringGrid1.RowCount + 1;
         end;
       end;
     end;
     
   finally
     CloseFile(Datei);
   end;
 end;
end;

end.


 
GuAV ©   (2004-08-31 14:00) [25]


> htonl()

или ntohl :)

=======
Q: What is the difference between htonl and ntohl?
Is this an implementation of the joke that Nikita Khrushchev
divided the Ministry of Transport into two parts: "(to) there" and "back (from there)".
A: The difference between those is that host order is different (and opposite) from network byte order.


 
КаПиБаРа ©   (2004-08-31 14:07) [26]

8ung   (31.08.04 11:26)

> При счтитывании этих четырех байт возвращается
> $FC495808(так ка и должно быть), а мне нужно, чтобы
> возвращалось $085849FC

После считывания поменяй байты местами.


 
Dyn`alt ©   (2004-08-31 14:11) [27]

var
 Bytes: array[0..3] of Byte;
 Int: Integer absolute Bytes;

Из файла читаешь в Bytes, потом юзаешь Int


 
GuAV ©   (2004-08-31 14:14) [28]

BSWAP надо



Страницы: 1 вся ветка

Текущий архив: 2004.09.19;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.054 c
4-1088471570
mvgfirst
2004-06-29 05:12
2004.09.19
Отправка SMS через мобилу + COM-порт. Не могу послать AT команду.


3-1093348596
Snip
2004-08-24 15:56
2004.09.19
InterBase и Remote Connect


14-1093689127
Piter
2004-08-28 14:32
2004.09.19
Ошибка в скрипте для клиентов форума


14-1093515594
ArMellon
2004-08-26 14:19
2004.09.19
Где можно скачать полный учебник по JavaScript?


3-1093258723
Vlad_Dyachkov
2004-08-23 14:58
2004.09.19
Реляционные БД