Главная страница
    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.51 MB
Время: 0.028 c
3-1093380738
ceval
2004-08-25 00:52
2004.09.19
Подскажите как заменить ADOTable на ADOQuery


4-1091525282
Antonmm
2004-08-03 13:28
2004.09.19
Ждущий режим


8-1088625804
parovoZZ
2004-07-01 00:03
2004.09.19
DirectX9.0


14-1091091921
Красная Майка
2004-07-29 13:05
2004.09.19
Очередной MMP


14-1092765485
ИМХО
2004-08-17 21:58
2004.09.19
Олимпийские игры: Афины 2004





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский