Текущий архив: 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 betweenhtonl
andntohl
?
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