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

Вниз

Задачка   Найти похожие ветки 

 
AlexanderMS ©   (2006-06-02 18:20) [0]

В файле записано число типа integer следующим образом. Если открыть файл с помощью шестнадцеричного редактора, то окажется, что число записано 4 байтами с шест. кодами соответственно

00 00 4С 98

Но это число имеет код "наоборотный", т. е.

98 4С 00 00

Это число 19608. Как его можно прочитать из файла с помощью TFileStream, если оно в таком зашифрованном виде?!


 
Desdechado ©   (2006-06-02 18:25) [1]

это не зашифрованный вид, это представление Intel
маки пришут в прямом порядке
а файлстриму параллельно, он байты читает


 
AlexanderMS ©   (2006-06-02 18:27) [2]

Кстати, это не просто задачка, это - моя проблема. Не могу придумать. В файле (опять из игры СnС Generals) почему-то 2 числа (начало файла в архиве и длина файла) записаны наоборот, видимо, для защиты. А я пишу редактор! Вот и не знаю. Пробовал через чтение Read переменной типа string и её reversestring, а как в Integer перевести - ?


 
AlexanderMS ©   (2006-06-02 18:28) [3]


> Desdechado ©   (02.06.06 18:25) [1]

И как быть?


 
MBo ©   (2006-06-02 18:39) [4]

>AlexanderMS
В [1] уже все сказано.

P.S. Непонятно, зачем читать строку, если там Integer


 
MBo ©   (2006-06-02 18:41) [5]

http://www.delphikingdom.ru/lyceum/
Разделы:
Начинающим программистам. Уроки Юрия Зотова.
Уроки от АП


 
AlexanderMS ©   (2006-06-02 18:44) [6]

Так там integer наоборот записан. Есть разница:
19608 и -1739849728, как читает FileStream!


 
Piter ©   (2006-06-02 18:47) [7]

procedure TForm1.Button1Click(Sender: TObject);
var
 i: LongWord;
 fs: TFileStream;
begin
 fs := TFileStream.Create("myfile", fmOpenRead);
 try
   fs.Position := 0;
   fs.WriteBuffer(i, 4);
   showmessage("Число: "+inttostr(i));
 finally
   fs.Free ;
 end;
end;


 
MBo ©   (2006-06-02 18:48) [8]

Есть одно тонкое место -

>как читает FileStream!
при твоем способе применения...


 
Cash ©   (2006-06-02 18:49) [9]

AlexanderMS ©   (02.06.06 18:27) [2]:
Тоже Генералов потрошим??? :)))
Я своих уже с год как раздербанил. :)))
Я там (ну типа "молодэ, зеленэ, як ж так можно то" :) ) запись использовал
с вариантами.
Type
  TLongInt = packed record
    case Word of
      0: (Value: LongInt);
      1: (Bytes: array [0..3] of byte);
  end;


Дошло? :)))

ЗЫ: просто читаем из стрима вперед, а в Bytes записываем с зада, а
потом берем Value! И усё!!! :)))


 
Piter ©   (2006-06-02 19:00) [10]

блин, автор запутал меня. Так как хранится число в файле?

00 00 4С 98 - вот так?

Так это и есть обычное представление HEX. Набери в виндовом калькуляторе в HEX режиме: 4C98 - и переведи в DEC, это и есть 19608


 
Cash ©   (2006-06-02 19:03) [11]

Число в стриме записано с обратным порядком байт!
Читать его надо тоже с зада на перед! :)
Но так как стрим с зада не почитаешь, приходится в тот самый ... писать! :)))
:)))


 
AlexanderMS ©   (2006-06-02 19:07) [12]

Спасибо за советы. Буду пробовать.


> Я своих уже с год как раздербанил. :)))

То есть?


 
Бормодед ©   (2006-06-02 19:08) [13]

function Convert(const Value: Integer): Integer;
asm
BSWAP EAX
end;


 
Piter ©   (2006-06-02 19:09) [14]

В моем примере можно тогда так:

procedure TForm1.Button1Click(Sender: TObject);
var
i: LongWord;
fs: TFileStream;
begin
fs := TFileStream.Create("myfile", fmOpenRead);
try
  fs.Position := 0;
  fs.WriteBuffer(i, 4);
  i := (i shl 24) + ( (i shl 8) and $00FF0000 ) + ( (i shr 8) and $0000FF00) + (i shr 24);
  showmessage("Число: "+inttostr(i));
finally
  fs.Free ;
end;
end;


 
AlexanderMS ©   (2006-06-02 19:09) [15]


> Так это и есть обычное представление HEX. Набери в виндовом
> калькуляторе в HEX режиме: 4C98 - и переведи в DEC, это
> и есть 19608


Это ладно, а число записано наоборот!


 
Piter ©   (2006-06-02 19:12) [16]

Бормодед ©   (02.06.06 19:08) [13]
function Convert(const Value: Integer): Integer;
asm
BSWAP EAX
end;


во, точно. Знание ассемблера рулез :)

Именно так и надо, а то я напридумывал:

i := (i shl 24) + ( (i shl 8) and $00FF0000 ) + ( (i shr 8) and $0000FF00) + (i shr 24);

:)))


 
Cash ©   (2006-06-02 19:13) [17]

AlexanderMS ©   (02.06.06 19:07) [12]:
Я распаковщик написал, раздербанил и успокоился. :)
И для чтения смещения и размера файла использовал эту запись и этот метод.


 
Cash ©   (2006-06-02 19:15) [18]

> function Convert(const Value: Integer): Integer;
> asm
> BSWAP EAX
> end;


А я в справочниеке его не нашел! Идать такого нет...


 
Piter ©   (2006-06-02 19:16) [19]

AlexanderMS ©   (02.06.06 19:09) [15]
Это ладно, а число записано наоборот!


как это наоборот?!

Записано: 00 00 4С 98 - ТАК?

Так вот: $00004C98 - это и есть: 19608

Как раз число записано соверщенно верно.

Проблема только в том, что в x86 процессорах числа как раз хранятся наоборот. Поэтому тебе и надо поменять байты, как сказал Бормодед ©   (02.06.06 19:08) [13]


 
Cash ©   (2006-06-02 19:19) [20]

Piter ©   (02.06.06 19:16) [19]:
Ух, елы-палы, я ж отписал уже - с обратным порядком байт, это значит:
$4C980000

А это уже другое чило!


 
Cash ©   (2006-06-02 19:20) [21]

Не, точнее будет: $984C0000


 
Piter ©   (2006-06-02 19:26) [22]

Cash ©   (02.06.06 19:19) [20]
Ух, елы-палы, я ж отписал уже - с обратным порядком байт, это значит:


что с обратным порядком байт е-мое?!?!?!?

В файле число записано как раз с нормальным порядком расположения байт!


 
Cash ©   (2006-06-02 19:45) [23]

Piter ©   (02.06.06 19:26) [22]
Look to [21].
В файле вместо $00004C98 записано $984C0000.


 
Cash ©   (2006-06-02 19:48) [24]

Piter ©   (02.06.06 19:26) [22]:
Ты Генералов рипал? ихние *.BIG файлы распаковывал?
Там в файле *.BIG FAT построена с обратным порядком байт.
Т. е. четырехбайтовые числа записаны наобарот.


 
default ©   (2006-06-02 19:49) [25]

никакого обращения байт не нужно
если теория хромает, можно экспериментом понять, наконец

procedure TForm1.Button1Click(Sender: TObject);
var
 dw: LongWord;
 f: File;
begin
 dw := $61626364;
 AssignFile(f, "C:/myfile.txt");
 Rewrite(f, 1);
 BlockWrite(f, dw, 4);
 Reset(f, 1);
 BlockRead(f, dw, 4);
 CloseFile(f);
 Caption := IntToHex(dw, 8);
end;


 
Cash ©   (2006-06-02 19:51) [26]

Уффф... молчу... молчу... слов моих больше нет!... :(


 
Piter ©   (2006-06-02 19:54) [27]

Cash ©   (02.06.06 19:45) [23]
В файле вместо $00004C98 записано $984C0000


ок. В файле записано: 984C0000

Смотрим на твой код в посте [9]:

после него в память компьютера будут занесены байты:

00 00 4C 98

А для x86 процессоров для беззнаковых чисел, это в десятичном представлении: 2555117568

То бишь, два с половиной с лихом миллиардов :)


 
Юрий Зотов ©   (2006-06-02 19:54) [28]

> AlexanderMS ©   (02.06.06 18:20)  

Все действительно сказано уже в [1]. Целые числа в памяти Intel хранятся в обратном порядке байт. То есть, если 4-х байтовая целая переменная I равна 19608, то в памяти, где она находится, мы увидим 98 4С 00 00.

Никаких преобразований тут не требуется, все происходит автоматически. Например:

var
 I: integer;
 P: PByte;
begin
  I := 19; // В памяти будет 03 01 00 00
  P := @I; // P указывает на первый в памяти байт I (равный 03).
  P^ := $98; // В памяти стало 98 01 00 00, I теперь равно 408 (DEC)
  Inc(P); // P указывает на второй в памяти байт I (равный 01).
  P^ := $4C; // // В памяти стало 98 4C 00 00, I теперь равно 19608 (DEC)
end;
 
В файл содержимое памяти записывается "как есть", и FileStream читает файл и пишет его в память тоже "как есть" - поэтому Вы и видите числа "в обратном порядке" (а на самом деле порядок тот, который нужен).

Преобразовывать ничего не требуется. Если известен адрес P в памяти, по которому хранится число, то получить значение этого числа очень просто:
I := PInteger(P)^;

И все, никаких преобразований.

PS
Немного странно, что человек, не знающий подобных вещей (а все изложенное - это всего лишь один из множества параграфов азбуки программирования), взялся что-то там ломать. Не рановато ли?


 
default ©   (2006-06-02 19:55) [29]

хотя пардон, нужно таки обратить:)


 
Piter ©   (2006-06-02 19:58) [30]

Юрий Зотов ©   (02.06.06 19:54) [28]

Юрий, да нет, вас тоже запутали. В файлах на диске как раз все хранится в правильном порядке. Поэтому при чтении в память байты надо переставлять.


 
begin...end ©   (2006-06-02 19:59) [31]

> Юрий Зотов ©   (02.06.06 19:54) [28]

> I := 19; // В памяти будет 03 01 00 00

Сомневаюсь...


 
Юрий Зотов ©   (2006-06-02 20:01) [32]

Так. Будем распутывать путаников.

Есть 4-байтовое число 15 ($0F). В памяти оно будет выглядеть так:
0F 00 00 00

Как оно будет записано в вашем хитром файле?


 
Piter ©   (2006-06-02 20:05) [33]

Юрий Зотов ©   (02.06.06 20:01) [32]

вот. Аналогичный вопрос.
У него там число: 19608

Как оно будет храниться в ФАЙЛЕ, как:

00 00 4С 98

или как:

98 4С 00 00

Если первый вариант - то перестановку делать надо, но сам Cash утверждает, что там хранится второй вариант. А в этом случае пост [9] Cash"а вообще бред и ничего такого делать не надо. Но у него я так понимаю получился редактор?


 
default ©   (2006-06-02 20:06) [34]

есть число 19608=$00004С98
в файл запишется так: 984C0000    (1)
считается: 00004С98(что и писалось)  (2)
если же в файле лежит 00004С98(не (1)), то и считается не (2), а надо чтобы читалось (2)  

все штука в том что пишется;) а пишется 19608:)


 
Piter ©   (2006-06-02 20:07) [35]

begin...end ©   (02.06.06 19:59) [31]
> I := 19; // В памяти будет 03 01 00 00

Сомневаюсь...


ну очевидно в памяти будет: 13 00 00 00


 
Юрий Зотов ©   (2006-06-02 20:09) [36]

> begin...end ©   (02.06.06 19:59) [31]

259, конечно.


 
Cash ©   (2006-06-02 20:13) [37]

Ребят, вы просто запутались! Кто здесь рипал Генералов? Кто ни будь еще
занимался вскрытием форматов?

Мое мнение маленькое! Я только дал инфу, как ей распоряжаться думайте
сами. Думаю, автор так же как и я понимает, о чем идет речь. Думаю,
просто вы маленько запутались.

Неохота мне сейчас ставить Генералов, и выдирать от туда кусок HEX данных
на всеобщий показ.

ЗЫ: ... Хотя где то там была моя статейка... А... вот она... выложил на
короткий срок. Посмотрите. Пособие для сборки экстрактора из BIG формата.
http://www.codefusion.jino-net.ru/articles/bigform.htm


 
default ©   (2006-06-02 20:14) [38]

причина путаниц в том, какое число пишется в файл:)


 
Piter ©   (2006-06-02 20:16) [39]

Cash ©   (02.06.06 20:13) [37]

да ты между прочим больше всех и запутал :))
Ответь на элементарный вопрос. Вот есть число: 19608

Как оно будет хранится в файле на жестком диске? Порядок байт какой будет?
такой:

1) 00 00 4С 98

или такой:

2) 98 4С 00 00

просто ты утверждаешь, что порядок байт будет как в случае 2).

НО. При этом твой же пост [9] есть бред тогда.


 
default ©   (2006-06-02 20:20) [40]

"В файле вместо $00004C98 записано $984C0000."
под "в файле записано" он имеет ввиду число, а не последовательность байт:)
$984C0000-->00004C98(в файле)

бывает же! много шума из ничего!


 
Cash ©   (2006-06-02 20:21) [41]

ГЫ! А я что? сказал, что я имею ввиду число 19608?
Look to [23]!!! And... think!

Я про десятичное значение ничего не говорил! Не я запутал! А пост [1]!!!

Пит, пожалуста посмотри из [37] ссылку. Мож твои сомнения рассеятся?! :)


 
Piter ©   (2006-06-02 20:23) [42]

Cash ©   (02.06.06 20:21) [41]

Повторю вопрос:

есть число: 19608

Как оно будет хранится в файле на жестком диске? Порядок байт какой будет?
такой:

1) 00 00 4С 98

или такой:

2) 98 4С 00 00


 
Piter ©   (2006-06-02 20:24) [43]

Ответь на этот вопрос, что будет - вариант 1) или 2)

И ВСЕ.

Иначе мы продолжим ветку до 1000 постов.

Cash, ты ошибочно полагаешь, что я чего-то не понимаю. Я все прекрасно понимаю, как и default, как и Юрий Зотов.

Но мы НЕ знаем как хранятся числа в ФАЙЛЕ. Поэтому просто ответь на вопрос в: [42]


 
Piter ©   (2006-06-02 20:25) [44]

Cash ©   (02.06.06 20:21) [41]
Не я запутал! А пост [1]!!!


в посте [1] абсолютно все правильно написано.


 
Cash ©   (2006-06-02 20:27) [45]

По ссылке, в куске HEX кода позиции 16 и 20, два четырех байтовых числа
записаны -
одно:
  0000 0194
второе:
  0000 4B03

Переведи мне их в десятичный вид! Это будет ответ на твой вопрос.
Мне подсказвать неохота. :)


 
default ©   (2006-06-02 20:29) [46]

+[34]
а пишется НЕ 19608:)заговорился


 
Piter ©   (2006-06-02 20:32) [47]

та-а-ак... продолжаем сериал :)))
Лол, мне даже интересно, до Кэша когда-нибудь мой вопрос дойдет или нет.

Ок, я терпеливый.

Многоуважаемый, Cash!!! Не соблагоизволите ли вы пояснить нам маленькую вещь.

Поскольку никто из нас, кроме Вас, не разбирал файлы этой чертовой игры, мы НЕ знаем и НЕ можем знать - как там все таки хранятся байты.

Поэтому, ответьте, пожалуйста, на вопрос:

Вот мы имеем число: 19608
Пусть это будет количество золота, которое у нас есть или любой другой параметр. Но число: 19608

Так вот, в файле на ЖЕСТКОМ ДИСКЕ в каком порядке будут идти байты этого числа:

1) 00 00 4С 98

или так:

2) 98 4С 00 00

Мы просим Вас сказать только одно - первый или второй вариант реализован в игре.

Дело в том, что программисты, разработвашие эту долбанную игру, могли применить как первый, так и второй подход.

Поэтому требуется уточнение от человека, который разбирал.

Поэтому, МОЛЮ! Всего лишь один ответ: 1) или 2) ?


 
Kerk ©   (2006-06-02 20:37) [48]

Юрий Зотов ©   (02.06.06 20:01) [32]
Есть 4-байтовое число 15 ($0F). В памяти оно будет выглядеть так:
0F 00 00 00


В памяти оно будет выглядеть так же как выглядит в файле


 
Cash ©   (2006-06-02 20:38) [49]

Piter, ты [45] видел или нет?
Ладно, уболтал! :)) Поскажу!
В файл эта дурь должна залезть как 98 4С 00 00.


 
Piter ©   (2006-06-02 20:41) [50]

Cash ©   (02.06.06 20:38) [49]
В файл эта дурь должна залезть как 98 4С 00 00


Ха-ха-ха-ха!!! Все, я сдаюь... ЛОЛ...

default, ты видел, что он написал? НЕТ, ты видел? И не говори мне, что теперь я как-то не так его понял :)))


 
Piter ©   (2006-06-02 20:42) [51]

Cash ©   (02.06.06 20:38) [49]
В файл эта дурь должна залезть как 98 4С 00 00


так. Ты все таки оставил место для неоднозначности.

То есть, если я открою файл HEX-редактором, который НЕ компонует байты в слова, то я увижу там последовательность байт:

98 4С 00 00

Я ПРАВИЛЬНО понял?


 
Cash ©   (2006-06-02 20:43) [52]

Piter ©   (02.06.06 20:41) [50]:
А ты докажы, что наобарот!


 
Piter ©   (2006-06-02 20:44) [53]

Не, не, не. Плиз, остался только один вопрос, честное слово. Я сформулировал наиболее четко, как только смог:

То есть, если я открою файл HEX-редактором, который НЕ компонует байты в слова, то я увижу там последовательность байт:

98 4С 00 00

Я ПРАВИЛЬНО понял?


 
default ©   (2006-06-02 20:46) [54]

Piter ©   (02.06.06 20:41) [50]
вообще подобные ветки очень противные! несмотря на примитивность вопроса(нужно знать лишь технические детали), можно запутаться и понаписать всякой ерунды:) гадкие ветки:)


 
Cash ©   (2006-06-02 20:46) [55]

Так теперь, Пит, давай напрягайся и отвечай на мой ворос из [45].
Считай эти два числа как обычно, и переведи мне их в десятичный вид.
Я сказал как обычно, а не задом на перед!!! Ведь я записал число так 19608,
как оно обычно записывается в файл.


 
Piter ©   (2006-06-02 20:47) [56]

default ©   (02.06.06 20:46) [54]

естественно. Особенно, когда человек думает, что он понимает в чем дело, а на самом деле нифига не понимает. И тем самым запутывает всех остальных :)


 
Cash ©   (2006-06-02 20:54) [57]

Ну что, сдаешься? Кто из нас нефига не понял? :)


 
Piter ©   (2006-06-02 20:54) [58]

Cash ©   (02.06.06 20:46) [55]
Так теперь, Пит, давай напрягайся и отвечай на мой ворос из [45].


я бы ответил, но ты НЕ понимаешь о чем мы тут вообще говорим :)

Я тебе отвечу так. Если в памяти компьютера есть такие байты:

00 00 01 94

То для x86-логики это число: 2483093504

Я даже знаю, что ты скажешь, что я не прав. А я прав :)
Спроси у Юрия Зотова или у любого другого мастера, которому ты доверяешь :)

И все таки позволь тебе задать вопрос:

если я открою файл HEX-редактором, который НЕ компонует байты в слова, то я увижу там последовательность байт:

98 4С 00 00

Я ПРАВИЛЬНО понял?


 
default ©   (2006-06-02 20:55) [59]

ещё раз, есть число 19608=$00004С98
в памяти оно хранится по принципу: младший байт по младшему адресу
в файл по байтам это число пишется в порядке возрастания адресов байтов числа в памяти: то есть в файл пойдёт $98, потом $4C, потом $00, потом $00


 
Piter ©   (2006-06-02 20:57) [60]

default ©   (02.06.06 20:55) [59]
в файл по байтам это число пишется в порядке возрастания адресов байтов числа в памяти


default, слушай! Ну только ты тут не запутывай :)
Откуда ты знаешь, КАК организовали запись чисел в файл разработчики игры. Давай я добьюсь ответа от Cash, тогда и разложим все по полочкам :)


 
Virgo_Style ©   (2006-06-02 21:02) [61]

Piter ©   (02.06.06 20:54) [58]

автор не Cash


 
Другой   (2006-06-02 21:02) [62]

Cash и Piter, Вы друг-друга понять не можете :)


 
Cash ©   (2006-06-02 21:03) [63]

Piter ©   (02.06.06 20:54) [58]:
Ты меня не понимаешь! Ты не можешь предугадать мои действия! А я твои - могу. Но это ваще здесь не кместу! (это к этому Я даже знаю, что ты скажешь, что я не прав)

Ты прав, если такая последовательность будет в файле и ты ее прочитаеш
без перевертывания, то получиш таку ерунду. А ведь это смещение до
файла! И точно так же с размером файла! Поэтому их надо читать с зада на
перед!

Я надеюсь теперь мы друг друга поняли?

А твой вопрос расплывчатый, я не понимаю о чем ты в нем говоришь!
Это даст тебе возможность на любой мой ответ сказать: "неверно!".
Это откровенный мухлеж! (без шуток!)


 
default ©   (2006-06-02 21:03) [64]

Piter ©   (02.06.06 20:57) [60]
"Откуда ты знаешь, КАК организовали запись чисел в файл разработчики игры."
я имею ввиду стандартные методы:)


 
Virgo_Style ©   (2006-06-02 21:06) [65]

Чем друг друга запутывать, прочитали бы обычным образом, если прочитается "не то" - "перевернули", и всего делов)


 
Cash ©   (2006-06-02 21:08) [66]

Virgo_Style ©   (02.06.06 21:06) [65]:
Почитай начальные посты, там интересно! :)


 
default ©   (2006-06-02 21:09) [67]

Virgo_Style ©   (02.06.06 21:06) [65]
в таких случаях говорится - тогда бы кина не было:):):)


 
Cash ©   (2006-06-02 21:19) [68]

Я вижу, кое кто решил сдуться?

Пит, вылезай, я тебя видел! :)))
Теперь то ты меня понял? Или дальше попрем? :)))


 
isasa ©   (2006-06-02 21:35) [69]

Вспомнить, что в D eсть ^integer, ^longinteger :)


 
Джо ©   (2006-06-02 21:36) [70]

> [69] isasa ©   (02.06.06 21:35)
> Вспомнить, что в D eсть ^integer, ^longinteger :)

"Вспомнить всё" :)


 
isasa ©   (2006-06-02 22:50) [71]

Не связь, а г... Роутер сгорел..
по теме
Для любителей экстрима, и поспорить
...
type rec = record
    one: integer;
    two: word;
end;
var vrec: rec;
...
vrec.one:=1;
vrec.two:=2;
далее сохранить запись в типизованный файл(лень набирать в пятницу вечером), посмотреть редактом, найти в спецификации порядк хранения байт в регистре процессора Intel x86, действительно "вспомнить все".
Если тупо сохранить структуру в файл, то целые именно так и будут записаны...


 
Юрий Зотов ©   (2006-06-02 23:18) [72]

> Kerk ©   (02.06.06 20:37) [48]
Благодарю за свежую новость.

> All
Вроде как, все стало ясно. После [49] и [55] дальнейшая дискуссия смысла не имеет.

> Cash ©   (02.06.06 20:46) [55]
> Я сказал как обычно, а не задом на перед!!! Ведь я записал
> число так 19608, как оно обычно записывается в файл.


Вы сильно заблуждаетесь. В двоичный (не текстовый) файл числа ОБЫЧНО записываются ТОЧНО так, как они хранятся в памяти - а именно, как раз "задом наперед". То есть, "задом наперед" - это и есть самый ОБЫЧНЫЙ способ записи. И при обратном чтении чисел из такого файла НИКАКИХ дополнительных преобразований не требуется.

Если сомневаетесь - запустите вот эту программку (на форму надо бросить 4 TLabel и назначить форме обработчики событий OnCreate и OnShow):

procedure TForm1.FormCreate(Sender: TObject);
var
 I, J: integer;
 F: file of integer;
 B: array[0..3] of byte absolute I;
begin
 I := 19608;
 AssignFile(F, "C:\IntNumber.bin");
 Rewrite(F);
 Write(F, I);
 CloseFile(F);
 Label1.Caption := "Есть число: " + IntToStr(I) + ", или $" + IntToHex(I, 8);
 Label2.Caption := "В памяти оно хранится так: ";
 for j := 0 to 3 do
   Label2.Caption := Label2.Caption + IntToHex(B[j], 2)
end;

procedure TForm1.FormShow(Sender: TObject);
var
 I: integer;
 F: file of byte;
 B: array[0..3] of byte;
 J: integer absolute B;
begin
 Label3.Caption := "В файле оно записано так: ";
 AssignFile(F, "C:\IntNumber.bin");
 Reset(F);
 for i := 0 to 3 do
 begin
   Read(F, B[i]);
   Label3.Caption := Label3.Caption + IntToHex(B[i], 2);
 end;
 CloseFile(F);
 Label4.Caption := "Из файла прочитано число " + IntToStr(J) + ", или $" + IntToHex(J, 8)
end;


Как видите, ни при записи числа, ни при его чтении ничего специально не переворачивается - то есть, используется самый обычный способ записи и чтения. А программа все же показывает, что число в файле хранится точно так же, как и в памяти - "задом наперед" (можете просмотреть файл двоичным редактором в режиме "как есть" - увидите то же самое).

Итак, обычный способ записи пишет число именно в перевернутом виде. Тем не менее, считывается оно, как видим, вполне нормально - и тоже самым обычным способом, без всяких преобразований.

Чего и следовало ожидать. И о чем Вам тут и толкуют.

Запустили и убедились? ОК, идем дальше.

Я прочитал Вашу статью. Из нее следует только одно - числа в формате Big записаны самым обычным способом. То есть, именно задом наперед, как оно и положено. Следовательно, статья не имеет никакого смысла - ну зачем взламывать самый обыкновенный, всем отлично известный, не требующий никакой дешифровки, читаемый просто "в лоб" формат?

В связи с этим - позвольте пару слов напоследок?

1. Я бы забрал статью обратно, не стал позориться перед людьми. Как поступите Вы - дело Ваше.

2. По моему мнению, если человек не знает даже азов, то начинать ему стоило бы не со "взлома" форматов, а кое с чего другого. Иначе он называется не "хакером", а другим, тоже известным сленговым словом.


 
Piter ©   (2006-06-03 00:53) [73]

Cash ©   (02.06.06 21:19) [68]
Я вижу, кое кто решил сдуться?


сори, не могу постоянно висеть в форуме.

Cash, тебе уже здесь это сказали десятки раз. Мне просто надо было убедиться, что ты действительно заблуждаешься. Я убедился.

Еще раз! Если в файле байты хранятся именно в таком порядке, о котором ты сказал - то как раз это и есть тот порядок, в котором числа хранятся в памяти компьютера! То есть, задом наперед!

Здесь уже неоднократно сказано, что это специфика x86 архитектуры - мультибайтовые числа хранятся по принципу: младший байт по младшему адресу.

Поэтому если побайтово считывать информацию из файла и также последовательно ее записать в память (что и делает TFileStream) - то никакого переворачивания не надо делать! И твой пост [9] просто лишний.

Я потому так долго и молчал. С одной стороны - твой пост [9], где идет перестановка байтов, с другой стороны, ты говоришь, что в самом файле байты идут наоборот, то есть никакой перестановки делать не надо получается. Парадокс! Особенно, если твой редактор работал.

Вот этого я не понимал (да и сейчас не понимаю). Скорее всего, ты где-то ошибаешься (или ты в программе делаешь двойную перестановку или вообще ее не делаешь) - но тут можно только гадать.

А вообще, как сказад Юрий, ты бы хоть самые основы изучил, прежде чем злорадствовать надо мной и хвалиться, что ты разобрал какой-то там формат, хотя ты даже не понял почему так и отчего. Без обид, но в этой области у тебя в знаниях явный пробел.

Рекомендую почитать уроки того же Юрия Зотова.

Добро пожаловать: http://www.baseprogram.narod.ru/

Если ты хотя бы эти 5 этапов изучишь действительно и разберешься - сразу все вопросы отпадут и ты посмеешься, читая эту ветку :)


 
Cash ©   (2006-06-03 05:43) [74]

Piter ©   (03.06.06 00:53) [73]:
Пит, ты не все посты читаешь! Читай до [68].

Так, раз уж тут такой фанатизм к архитектуре x86, постараюсь объяснить
доходчево через эту примудрость.

есть число, у нас оно равно 19608, HEX его будет 0х00004С98,
мы берем и пишем его в бинарный файл (бросте вы эти шуточки с file of ...,
это не культурно!), что потом мы видем в HEX редакторе на его месте?
Если мы не ламеры и не такие запутанные как некоторые, то мы ну просто
обязаны увидеть на том месте такую штуку: 984С 0000 (я привык к
компановке в слова). ОТКУДА В ваших головах взялась мысль, что это
ОБРАТНОЕ написание? Ведь младшая позиция в потоке не с права, а СЛЕВА!
Тем самым мы все видем нормально, в стандартной, ПРЯМОЙ записи!
Нет в данном случае никакой обратной записи! НО, если в ЧУЖОМ бинарном
файле нам всречается такая последовательность: 0000 4С98, то чтобы
прочитать значение 0х00004С98 нам необходима инверсия порядка байт.
Потаму, что нормальным ПРЯМЫМ способом мы прочитаем значение:
0х984С0000, как уже ВЕРНО заметил Piter, которое равно 2483093504.

Товарищи, вы меня задолбали уже, особенно Пит который неявно
выражается, эту ветку я теперь только почитаю, мне неохота объяснять
то, что вы неспособны понять! :(((


 
antonn ©   (2006-06-03 08:03) [75]

так-с, страсти накаляются, ставки растут...
кто же дольше продержится в этой схватке недопониманий и занудства?
:)


 
Ketmar ©   (2006-06-03 11:05) [76]

повеселили субботним утром. пишите ещё! %-)


 
Kerk ©   (2006-06-03 11:07) [77]

Юрий Зотов ©   (02.06.06 23:18) [72]
Благодарю за свежую новость.


В том, что ты знаешь я не особо сомневаюсь. Но людей путать незачем. Итак тут немаленькая ветка по простому вопросу.


 
Юрий Зотов ©   (2006-06-03 11:12) [78]

> Cash ©   (03.06.06 05:43) [74]

> пишем его в бинарный файл (бросте вы эти шуточки с file of ...,
> это не культурно!),


В таком случае позвольте поинтересоваться - что, по-Вашему, есть бинарный файл и чем он отличается от file of ...?

Убедительная просьба на этот вопрос все же ответить. А то мы, кажется, говорим на разных языках.

> ОТКУДА В ваших головах взялась мысль, что это ОБРАТНОЕ написание?
> Ведь младшая позиция в потоке не с права, а СЛЕВА!


Вы снова заблуждаетесь. В потоке нет никаких чисел. В нем есть просто информация, которую при чтении можно трактовать как угодно - хоть как числа, хоть как картинки, хоть как текст, хоть как музыку, хоть как угодно еще. А раз в нем нет чисел, то в нем нет ни младших, ни старших позиций. Есть просто позиции. И раз порядок следования этих позиций обратный по отношению к величине числа - значит, это и есть его обратное написание. По отношению к порядку следования в памяти - прямое, а по отношению к величине числа - обратное.

> Тем самым мы все видем нормально, в стандартной, ПРЯМОЙ записи!

Тем самым, мы действительно все видем нормально, действительно в стандартной записи. Но не в ПРЯМОЙ, а в ОБРАТНОЙ. Поскольку СТАНДАРТНОЙ записью именно ОБРАТНАЯ и является.

Поток ничего не инвертирует. Он просто пишет память, "как есть" (это и есть стандартный способ - не прямой, и не обратный, а "как есть"). А поскольку в памяти x86 порядок следования байт ОБРАТНЫЙ, то и в файле он получается тоже ОБРАТНЫМ. Все "в лоб" и никаких фокусов.

> НО, если в ЧУЖОМ бинарном файле нам всречается такая
> последовательность: 0000 4С98, то чтобы прочитать значение
> 0х00004С98 нам необходима инверсия порядка байт.


Совершенно верно (причем не только в чужом файле, в своем - тоже). И полностью согласуется с тем, о чем Вам говорят. И полностью противоречит Вашей же статье.

Приводя этот пример, Вы, уж извините, мухлюете. Потому что в статье Вы пишете прямо противоположное: "К примеру: есть число 38732, в шестнадцатеричной системе счисления это будет 0x0000974C (4 байта). Но из файла мы читаем 0x4C970000..."

То есть, в файле BIG все в порядке, число пишется стандартным способом и при его чтении ничего конвертировать не нужно. Поэтому дальнейшее Ваше утверждение : "... и чё с этим делать. Читать наоборот" - неверно.

Читать, конечно, надо. Но не наоборот, а обычным способом. И не только файлы.

> мне неохота объяснять то, что вы неспособны понять! :(((

Что ж, а мне пока еще охота, как видите. Пока еще надеюсь, что понять Вы все же способны. Сделайте усилие, плз.

PS
Так напоминаю вопрос - что, по-Вашему, есть бинарный файл и чем он отличается от file of ...?


 
Юрий Зотов ©   (2006-06-03 11:18) [79]

> Kerk ©   (03.06.06 11:07) [77]

> Но людей путать незачем.

Ром, я не виноват, что ты запутался. Чтение с записью спутал. Чес-слово, не виноват.

Только зря ты... это... во множественном числе-то...


 
begin...end ©   (2006-06-03 11:33) [80]

> Piter ©   (02.06.06 20:54) [58]

> Если в памяти компьютера есть такие байты:
> 00 00 01 94
> То для x86-логики это число: 2483093504

Громко сказано...


 
boriskb ©   (2006-06-03 11:53) [81]

Desdechado ©   (02.06.06 18:25) [1]
это не зашифрованный вид, это представление Intel


Еще на IBM-360 так было.


 
Cash ©   (2006-06-03 13:09) [82]

Юрий Зотов ©   (03.06.06 11:12) [78]:
Я не люблю отказываться от своих утверждений, но, товарищ Юрий, ваш
возраст и синий значек делают вам одолжение в виде моего отказа от
только что произнесенного слова здесь не постить.
Ладно, я не гордый!

> Так напоминаю вопрос - что, по-Вашему, есть бинарный файл
> и чем он отличается от file of ...?


Ничем, никак. Некультурно пользоваться File of, когда есть стрим.
(ответные вопросы пойдут в игнор)

Так, Юрий, давайте с вами эксперемент проведем. У меня есть число,
я записал его в файл, ваша задача состоит в том, чтобы прочитать это
число и назвать мне его. Я не скажу как я его записал, ваша задача
его только прочитать и назвать мне, а я скажу как вы число прочитали.
Тем самым, думаю, наши с вами разногласий завершатся.
Файл здесь: http://webfile.ru/975596
По размеру вам станет ясно, какое число туда записано.

P. S: Право смешно просто, что люди, ниразу не видевшие внутринности
BIG архива могут в порыве массового заблуждения утверждать свою
неверную точку зрения.


 
boriskb ©   (2006-06-03 13:20) [83]

Cash ©   (03.06.06 13:09) [82]
люди, ниразу не видевшие внутринности
BIG архива могут в порыве массового заблуждения утверждать свою неверную точку зрения.


Евгений, я не понял - у тебя какие могут быть претензии в свете вышеприведенной цитаты?
Они же не видели и именно поэтому так долго просили тебя разъяснить "так как же все же пишутся числа в этот файл?"
Поскольку ты долго, нудно и крайне путанно отвечал на этот вопрос, то как тебе могли правильно и однозначно ответить на первоначальный?


 
Piter ©   (2006-06-03 13:39) [84]

Cash ©   (03.06.06 13:09) [82]

слушай, я даже уже разозлился на тебя.
Давай ты в дальнейшем будешь НОРМАЛЬНО отвечать на вопросы, ДУМАЯ при этом, ок? А то ты возомнил себя хрен знает кем, даже когда с тобой разговаривает Юрий Зотов - программист с десятилетним стажем, который писал такие системы - о которых тебе можно только мечтать. Я серьезно, сбавь спесь.

Я думаю... НЕТ, я ВИЖУ, что ты очень упертый. Только подумай, если такие спецы говорят, что ты НЕ ПРАВ, возможно, ты все таки не прав?

В твоем файле идут такие байты:

00 01 14 A3

И судя по всему, это как раз ДРУГАЯ форма записи, чем ты говорил про эту игру!

Видимо, это число: 70819

Но тогда по этой логике число 19608 о котором мы говорили, будем записано как:

00 00 4С 98

И вот я думаю. Именно ТАК записываются числа в игре? ДА ИЛИ НЕТ?

Ибо если формат все таки такой, то ты нагло обманул нас, говоря в своем посте [49]:

>В файл эта дурь должна залезть как 98 4С 00 00.


 
Piter ©   (2006-06-03 14:14) [85]

Так, я понял про что наш многоуважаемый Cash говорит.

Когда он говорит:

>В файл эта дурь должна залезть как 98 4С 00 00

Он имеет ввиду!!! Что если СЧИТАТЬ это значение в память, то компьютер поймет это как $984С0000

Мы же имеем в виду, что вот ИМЕННО ПОСЛЕДОВАТЕЛЬНОСТЬ БАЙТ то в файле будет:

00 00 4C 98

Вот именно про это я и спрашивал это в свое посте: [58] !!!!!!!!!!

если я открою файл HEX-редактором, который НЕ компонует байты в слова, то я увижу там последовательность байт:

98 4С 00 00

Я ПРАВИЛЬНО понял?


Но Cash предпочитал не отвечать на этот вопрос (хотя только ОН знал, как действительно записывается в этой игре числа). И это потрясающе!!! На протяжении 40 постов он говорил, прикалывался, уличал всех (даже Юру Зотова) в незнании, но так и не ответил на этот вопрос.

То ли не знал, что такое "который НЕ компонует байты в слова", то ли это просто РАЗВОД.

Так вот, сопоставив все посты Cash"а и даже $ля прочитав его долбанную статью, я наконец-то понял КАК на самом деле записываются в игре числа.

Итак, объявляю всем! В том числе и особенно Юрию Зотову!

Итак, теперь уже на 98% ситуация следующая:

числа в файл записываются как раз прямо, то есть, число: 19608 в файл будет записано вот такими байтами:

00 00 4С 98

То бишь, по принципу старший байт по младшему адресу. Соответственно, да, при чтении байты нужно переставлять.

Спасибо дорогому Cash, что он умудрялся на протяжении 40 постов путать всех, но так прямо и не сказал КАК ЖЕ ПИШУТСЯ БАЙТЫ в файл :)

Думаю, тема исчерпана.

P.S. Ну стоит добавить опять же, что вместо вариантной записи придуманной Cash"ем можно просто воспользоваться методом Бормодед, даным еще в далеком [13] посту, то есть для перестановки байтов использовать встроенную ассемблерную функцию: BSWAP

Засим точно все :)


 
Юрий Зотов ©   (2006-06-03 14:42) [86]

> Cash ©   (03.06.06 13:09) [82]

> Я не люблю отказываться от своих утверждений
Это заметно.

> ваш возраст и синий значек делают вам одолжение
Благодарю за одолжение.

> Ладно, я не гордый!
Это не заметно.

>> что, по-Вашему, есть бинарный файл и чем он отличается от file of ...?
> Ничем, никак.

Именно. Правда, Вы так и не сказали, что, по-Вашему есть бинарный файл.

> Некультурно пользоваться File of, когда есть стрим.

Что значит "некультурно"? А культурно пользоваться Паскалем, когда есть Си? А наоборот - культурно? А культурно ездить на зеленом автомобиле, если есть синий? А не понимать что разные способы работы с файлами различаются только внешне, а на самом деле есть одно и то же - это культурно?

> (ответные вопросы пойдут в игнор)

Почему? Вы же не гордый, сами сказали.  Правда, о причине я догадываюсь - если мы начнем копать эту тему, то, скорее всего, раскопаем то, чего Вам раскапывать не хотелось бы. И Вы это понимаете.

> Так, Юрий, давайте с вами эксперемент проведем.

Уже предлагал, в [72]. Вы запускали эту программу? Смотрели, что она показывает? И как - ее показания Вам ни о чем не говорят? Или Вы настолько не любите "отказываться от своих утверждений", что даже программа Вас не убеждает?

> У меня есть число, я записал его в файл, ваша задача состоит в
> том, чтобы прочитать это число и назвать мне его. Я не скажу как я его
> записал, ваша задача его только прочитать и назвать мне, а я скажу как
> вы число прочитали.


И что дает этот эксперимент? ОК, даже не глядя в этот файл я называю Вам первое попавшееся число - десять. И утверждаю, что именно это число я прочитал из Вашего файла. Теперь очередь за Вами - скажите мне, каким образом я его прочитал.

> люди, ниразу не видевшие внутринности BIG архива
Почему "ни разу не видевшие"? Вы показали их в своей статье.

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

Сильно! Весь взвод шагает не в ногу. С ефрейтором.

PS
Итак, число я Вам назвал - десять. Очередь за Вами - скажите, как я его прочитал из Вашего файла. Жду ответа. После которого выяснится, что Ваш эксперимент ничего не показывает. А вот эксперимент из [72] - показывает.

PPS
И что за манера - не отвечать прямо и точно на прямо и точно поставленные вопросы? Вас спросили (см. [32]) - есть 4-байтовое число $0F, как оно будет записано в BIG-формате? Тоже жду ответа.


 
Юрий Зотов ©   (2006-06-03 15:02) [87]

> Piter ©   (03.06.06 14:14) [85]

> я наконец-то понял КАК на самом деле записываются в игре числа.
> числа в файл записываются как раз прямо,


Как раз наоборот. В статье об этом так и сказано:
"К примеру: есть число 38732, в шестнадцатеричной системе счисления это будет 0x0000974C (4 байта). Но из файла мы читаем 0x4C970000".

И то же самое подтверждено в [49]. То есть, использован самый обычный способ записи чисел - в лоб и без всякой шифрации. Остается только поаплодировать хакеру, сумевшему его "взломать".


 
Другой   (2006-06-03 15:03) [88]

Cash ©   (03.06.06 5:43) [74]
Ну наконец-то растолковали :)


 
Piter ©   (2006-06-03 15:18) [89]

Юрий Зотов ©   (03.06.06 15:02) [87]
Как раз наоборот. В статье об этом так и сказано:
"К примеру: есть число 38732, в шестнадцатеричной системе счисления это будет 0x0000974C (4 байта). Но из файла мы читаем 0x4C970000".

И то же самое подтверждено в [49]. То есть, использован самый обычный способ записи чисел - в лоб и без всякой шифрации. Остается только поаплодировать хакеру, сумевшему его "взломать".


Ха-ха! А вот и нет, дядь Юр! Я тоже ДО-О-ОЛГО ломал голову, как же автор умудряется писать такие противоположные вещи, а потом понял!

Вот он говорит:

>В файл эта дурь должна залезть как 98 4С 00 00

НО. Он имеет в виду не ТО, что в файле будут записаны байтики: 98 4С 00 00

А то, что они будут записаты ТАКИМ образом, что если считать их напрямую, то получится число: $984С0000 - ВОТ!

К примеру: есть число 38732, в шестнадцатеричной системе счисления это будет 0x0000974C (4 байта). Но из файла мы читаем 0x4C970000

И тут тоже самое! Он имеет в виду, что в файле записаны байтики:

0000974C

>Но из файла мы читаем 0x4C970000

имеется в виду, что если напрямую читать, то получится 0x4C970000!

Вот такая блин логика у автора!!! Я ее понял и расшифровал, я просто горд собой. Это покруче взлома каких-то там файлов игры :)

Понятное дело, что Crash абсолютно не имеет опыта работы с этими вещами, поэтому использует свои надуманные понятия, которые сильно вводят в заблуждение.

Дядь Юр, заметьте, какой я тонкий пример придумал:

если я открою файл HEX-редактором, который НЕ компонует байты в слова, то я увижу там последовательность байт:

98 4С 00 00

Я ПРАВИЛЬНО понял?


Мне кажется, я предусмотрел в этов попросе ВСЕ! Ответь на него автор, это точно бы показало картинку, тут уже все однозначно. Но к сожалению на этот  контрольный вопрос автор отвечать не захотел:

Cash ©   (02.06.06 21:03) [63]
А твой вопрос расплывчатый, я не понимаю о чем ты в нем говоришь!


Cash ©   (02.06.06 21:03) [63]
Это откровенный мухлеж! (без шуток!)


Вот так, поэтому я теперь сам отвечу на свой вопрос:

>Я ПРАВИЛЬНО понял?

Нет, тогда я понял неправильно. В HEX-редакторе мы увидим:

00 00 4C 98


 
Юрий Зотов ©   (2006-06-03 15:27) [90]

> Piter ©   (03.06.06 15:18) [89]

Что имеет в виду Cash, похоже, неизвестно даже ему самому. Поэтому и на контрольные вопросы не отвечает - знает, что если ответит, то тут же будет пойман. А ему этого сильно не хочется - он хоть и не гордый, но, как и положено настоящему кулхацкеру, от своих утверждений отказываться не привык (даже если они ошибочные? странно, в 21 год уже пора бы и научиться, не тинейджер уже). Вот и юлит - одни слова, а в словах сплошная каша. Как и в голове, надо полагать.


 
default ©   (2006-06-03 17:21) [91]

Piter ©   (03.06.06 15:18) [89]
"Я тоже ДО-О-ОЛГО ломал голову, как же автор умудряется писать такие противоположные вещи, а потом понял!"
я про это ещё в [40] говорил, правда тоже весьма путано выразился
короче все всё понимают, только вот Cash говорил на своём, особом языке:)
а вот то, что гонору от него было услышано в стиле "не способны понять" это, конечно, не делает ему чести


 
Marser ©   (2006-06-03 18:00) [92]

> То есть, если я открою файл HEX-редактором, который НЕ компонует
> байты в слова, то я увижу там последовательность байт:

А даже если компонует, в HEX пофиг, только пробелов меньше.
По сабжу: во млин... Задом-наперед, шиворот-навыворот... Для меня (хоть я об этом и знаю) даже странно, если было бы наоборот, если бы старший байт шёл первым...
Учите матчасть... Впрочем, полтора года назад я у разработчика "железа" тоже переспрашивал, какой байт идёт первім, старший или младший...


 
Юрий Зотов ©   (2006-06-03 18:09) [93]

> Marser ©   (03.06.06 18:00) [92]

> полтора года назад я у разработчика "железа" тоже переспрашивал, какой
> байт идёт первім, старший или младший...

Сергей, а форматы ты тогда уже ломал? Не зная еще последовательности байт?

Нет еще? То-то же, слабак ты, дружище. Учись у истинных кулхацкеров - они и без этого форматы "на раз" ломают. А потом статьи пишут - показывают таким, как ты, слабакам, как это запросто делается.


 
Marser ©   (2006-06-03 18:13) [94]

> [93] Юрий Зотов ©   (03.06.06 18:09)
> > Marser ©   (03.06.06 18:00) [92]
>
> > полтора года назад я у разработчика "железа" тоже переспрашивал,
> какой
> > байт идёт первім, старший или младший...
>
> Сергей, а форматы ты тогда уже ломал? Не зная еще последовательности
> байт?

Да нет, как-то не пробовал...
Зато я к тому времени прекрасно знал hi, lo, сдвиговые и побитовые операции, поэтому, немного удивившись и намотав на ус, всё сделал :-)

>
> Нет еще? То-то же, слабак ты, дружище. Учись у истинных
> кулхацкеров - они и без этого форматы "на раз" ломают. А
> потом статьи пишут - показывают таким, как ты, слабакам,
> как это запросто делается.

:-))

З.Ы. Вспомнил! Об обратной записи я тогда уже знал - по книгам, но не знал, что это фактический стандарт.


 
Piter ©   (2006-06-03 18:33) [95]

Marser ©   (03.06.06 18:00) [92]
А даже если компонует, в HEX пофиг, только пробелов меньше


что-то я не понимаю, о чем ты говоришь.

Давай вот я скриншот сделаю: http://img213.imageshack.us/img213/9009/bytedwords8ne.gif


 
Marser ©   (2006-06-03 18:42) [96]

> [95] Piter ©   (03.06.06 18:33)
> Marser ©   (03.06.06 18:00) [92]
> А даже если компонует, в HEX пофиг, только пробелов меньше
>
> что-то я не понимаю, о чем ты говоришь.
>
> Давай вот я скриншот сделаю: http://img213.imageshack.us/img213/9009/byte
> dwords8ne.gif

А я понимаю, о чём ты, не нужно было скриншота :-)
Прелесть HEX именно в том, что тетрада, байт и слово занимают фиксированное число знакомест, даром что в обратном порядке.


 
AlexanderMS ©   (2006-06-03 18:51) [97]

Очень жаль, что меня не было на этой ветке во время таких грандиозных дискуссий! Однако я всё-таки говорю, что это похоже на разговор глухих. Верно было замечено:

> Cash и Piter, Вы друг-друга понять не можете :)

Я это коварное число в файл не записывал (повторяю), его записывала программа разработчиков. Создавал редактор Cash, если у него получилось, то он в курсе дела. Почему я говорю, что число записано наоборот? Я посчитал число байт, занимаемых неким файлом в архиве BIG. Это было число сами знаете какое. Я обнаружил, как и Cash, что в начале архива есть блок описания файла. Там указывается начало каждого файла в архиве, его размер (размер файла в архиве) и имя. Данных довольно, чтобы прочитать архив. Когда я экспериментировал с файлами небольших размеров через сохранение файла с помощью существующего редактора, я обнаружил, что и где указывается. Я мог предположить, что число записано наоборот. Но я не уточнил, относительно чего наоборот: того, как числа храняться в памяти или того, как они хранятся в файле. Здесь они записаны так, что обычным способом через FileStream его не прочесть. Поэтому и появилась сия "противная" ветка.


> По моему мнению, если человек не знает даже азов, то
> начинать ему стоило бы не со "взлома" форматов, а кое с
> чего другого. Иначе он называется не "хакером", а другим,
>  тоже известным сленговым словом.


Если эта реплика ко мне, то я пишу программы для собственных нужд, и не обязательно дело касается "взлома форматов" (См. мой сайт. Там хакером или "известным сленговым словом" и не пахнет).

P.S. Недопонимание рождает великие споры, и эта ветка тому подтверждение...


 
AlexanderMS ©   (2006-06-03 18:53) [98]

Спасибо всем, у меня всё получилось! Но я всё-таки воспользовался функцией Бормодеда © - "дёшево, удобно и практично" (с).


 
Piter ©   (2006-06-03 19:36) [99]

Marser ©   (03.06.06 18:42) [96]
Прелесть HEX именно в том, что тетрада, байт и слово занимают фиксированное число знакомест, даром что в обратном порядке


нда, Marser, теперь ты :)
Давай растолкую, мне теперь уже все равно:

Итак, от Cash"а очень долго я добивался одного, как число 19608 физически записано в файле: как 00 00 4С 98 или как 98 4С 00 00

Для этого я задал конкретный вопрос - что ОН увидит, если откроет этот файл в HEX-редакторе.

При этом я специально добавил, что он увидит в редакторе, который НЕ объединяет байты в слова.

И тут ты говоришь, что неважно - объединяет он или нет!!!!

Но как это НЕ важно, если в случае НЕ объединяет, увидим:

00 00 4С 98

а в случае, если редактор объединяет байты в двойные слова, то в редакторе мы увидим:

984С0000

Это по-твоему абсолютно неважно?


 
Piter ©   (2006-06-03 19:37) [100]

AlexanderMS ©   (03.06.06 18:53) [98]

да собственно о тебе то все давно и забыли. Ответ был дан Бормодедом и действительно вряд ли можно придумать функцию лучше для перестановке байт.

Остальной  спор то пошел с Cash, который как выяснилось оперировал своими понятиями, расходящиеся от общепринятых.


 
Marser ©   (2006-06-04 02:53) [101]

> [99] Piter ©   (03.06.06 19:36)
> Marser ©   (03.06.06 18:42) [96]
> Прелесть HEX именно в том, что тетрада, байт и слово занимают
> фиксированное число знакомест, даром что в обратном порядке
>
> нда, Marser, теперь ты :)
> Давай растолкую, мне теперь уже все равно:
>
> Итак, от Cash"а очень долго я добивался одного, как число
> 19608 физически записано в файле: как 00 00 4С 98 или как
> 98 4С 00 00
>
> Для этого я задал конкретный вопрос - что ОН увидит, если
> откроет этот файл в HEX-редакторе.
>
> При этом я специально добавил, что он увидит в редакторе,
> который НЕ объединяет байты в слова.
>
> И тут ты говоришь, что неважно - объединяет он или нет!!
> !!
>
> Но как это НЕ важно, если в случае НЕ объединяет, увидим:
>
>
> 00 00 4С 98
>
> а в случае, если редактор объединяет байты в двойные слова,
> то в редакторе мы увидим:
>
> 984С0000
>

Кому это ты рассказываешь? :-)
Кстати, честно говоря, тоже первую минуту ничего не понял, столкнувшись с этим, когда делал лабу по AVR на IAR-компиляторе(осенью).
Обратил внимание, что байты меняются местами при формировании в слова и двойные слова. Потом просто вспомнил, как сам передаю слова - младшим байтм вперёд и усё.
Хотя ничего сверхъестественного в этом нет и прав ЮЗ, что проблемы от недостатка образования, кое в наглых формах становится ламерством :-)
А твой разговор с Cash напомнил мне возню Ну Меллона (тогда ещё к-мана) с одним товарисчем по поводу .RC и .RES-файлов. Вот смеху-то было...

> Это по-твоему абсолютно неважно?

А разве это не на автомате должно быть у взломщиков форматов? Снова скажу - прав ЮЗ.


 
Piter ©   (2006-06-04 14:12) [102]

Marser ©   (04.06.06 2:53) [101]
разве это не на автомате должно быть у взломщиков форматов?


нда... Marser, я у человека на протяжении 20 постов пытался вытянуть ответ на вопрос и в конце концов сформулировал вопрос наиболее четко, так, чтобы уже не было неоднозначностей.

И тут ты говоришь, что это уточнение не важно! Нифига себе неважно, если оно могло кардинально изменить ответ.

Потому что я спросил "ЧТО ты увидишь в HEX-редакторе". И если там бы стояло объединение в слова - то он бы мог сказать, что увидел совсем другое.

Так что это архи-важное замечание.


 
Джо ©   (2006-06-04 14:19) [103]

Прочитал всё. Какая страшная ветка...


 
Marser ©   (2006-06-04 14:20) [104]

> [102] Piter ©   (04.06.06 14:12)

Миша, остынь немного ;-)

> Потому что я спросил "ЧТО ты увидишь в HEX-редакторе". И
> если там бы стояло объединение в слова - то он бы мог сказать,
> что увидел совсем другое.
>
> Так что это архи-важное замечание.

Возможно. Но всё это напоминает обкашлившуюся здесь тему форума по хирургии. Спрашивается, зачем было вскрывать пациента, имея такую базу? Сам понимаешь, этот вопрос не к тебе. Но и ты хорош - сформулировать можно было быстрее и проще, при условии, что ты этого хочешь и сам не плаваешь.


 
Piter ©   (2006-06-04 15:23) [105]

Marser ©   (04.06.06 14:20) [104]
сформулировать можно было быстрее и проще


О! Отлично. Сформулируй, никаких проблем. Попробуй :)
Я с удовольствием посмотрю.


 
Marser ©   (2006-06-04 15:36) [106]

> [105] Piter ©   (04.06.06 15:23)
> Marser ©   (04.06.06 14:20) [104]
> сформулировать можно было быстрее и проще
>
> О! Отлично. Сформулируй, никаких проблем. Попробуй :)
> Я с удовольствием посмотрю.

ЮЗ уже всё сказал. А ты напрасно тратишь время.
"Один глупец может задать столько вопросов, что и сто мудрецов не дадут ответа" (С)


 
Piter ©   (2006-06-04 15:43) [107]

Marser ©   (04.06.06 15:36) [106]
ЮЗ уже всё сказал. А ты напрасно тратишь время


Marser, тебе самому не кажется, что у нас очень интересный диалог? :)))

- Я пытаюсь сформулировать наиболее корректный вопрос
- Ты говоришь, что вот одно условие можно было не говорить
- Я тебе пытаюсь объяснить, что это условие просто необходимо было говорить в вопросе
- Ты говоришь "Да, я понимаю, но вопрос вообще можно было намного лучше задать"
- Я спрашиваю - "И как же?"
- ты не формулируешь его, а отговариваешься какими-то цитатами :)

Это очень интересный прием диалога.

Тут главное критиковать других, но самому конкретно ничего не предлагать, занимая так сказать возвышенную точку зрения, типа с такой полуусмешкой.

Это практически исключает возможность того, что тебя подловят где-то и ты вообще опростоволосишься.

И в крайней случае при такой тактике всегда можно сказать "Я думал ты умнее, не вижу дальше смысла с тобой разговаривать" - и все :)

Но, честное слово, Marser, не надо практиковать такой подход. Он просто нечестный :)


 
Marser ©   (2006-06-04 15:46) [108]

> [107] Piter ©   (04.06.06 15:43)
> Marser ©   (04.06.06 15:36) [106]
> ЮЗ уже всё сказал. А ты напрасно тратишь время
>
> Marser, тебе самому не кажется, что у нас очень интересный
> диалог? :)))

Мне кажется, что у нас всегда интересные диалоги. И всегда я не прав, адназначна.

> Тут главное критиковать других, но самому конкретно ничего
> не предлагать, занимая так сказать возвышенную точку зрения,
> типа с такой полуусмешкой.

Неа, тут главное высказать точку зрения. Я её высказал, ты прицепился. Ну и нарвался :-)

> И в крайней случае при такой тактике всегда можно сказать
> "Я думал ты умнее, не вижу дальше смысла с тобой разговаривать"
> - и все :)

Я бы и не отвечал, ибо у меня нет такого желания. Но ты же ждёшь ответов. А потом обижаешься. Как обычно :-)
Политику помнишь? ;-)


 
Piter ©   (2006-06-04 15:52) [109]

Нда. Очевидно желанье потрепаться. Но в этой ветке я уже достаточно натрепался, так что сори :)
Поэтому давай чисто конкретика.

Я тебе приведу цитату:

Marser ©   (04.06.06 14:20) [104]
Но и ты хорош - сформулировать можно было быстрее и проще


ты говорил ЭТО?
Если ты это говорил, то я так понимаю эту фразу - в ней ты говоришь, что можно было сформулировать вопрос, который я задал Cash"у, намного понятнее. Верно?

Ок, я допускаю мысль, что можно.

И просто тебя прошу - СФОРМУЛИРУЙ вопрос проще.

Не надо рассужденй на тему "а зачем", "ЮЗ уже все сказал" и тому подобного. Мне чисто для себя интересно.

Я считаю, что сформулировал наиболее корректно и просто. Ты сказал, что можно проще. Так сформулируй, вот и все, о чем я прошу.


 
Marser ©   (2006-06-04 16:12) [110]

Иди ты.


 
Piter ©   (2006-06-04 16:24) [111]

Marser ©   (04.06.06 16:12) [110]
Иди ты.


:)

Marser ©   (04.06.06 14:20) [104]
Миша, остынь немного ;-)


обращу твою фразу к тебе :)

Ну и плюс я таки был прав:

Piter ©   (04.06.06 15:43) [107]
И в крайней случае при такой тактике всегда можно сказать "Я думал ты умнее, не вижу дальше смысла с тобой разговаривать" - и все :)


 
Marser ©   (2006-06-04 16:31) [112]

Ты предсказуем. Скучно...


 
Piter ©   (2006-06-04 16:42) [113]

Marser ©   (04.06.06 16:31) [112]
Ты предсказуем. Скучно...


а мне показалось, это я предсказал, ЧТО ты мне скажешь на 3 поста вперед :)

Ну да ладно. Marser, ты взгляни с моей стороны как это выглядит. ТЫ сказал, что МОЖНО сформулировать лучше. И на мою невинную просьбу сформулировать, ты что только не говорил (вот до обид дошло), но только НЕ формулировал.

То ли не ты можешь формулировать, поэтому тебя так раздражают мои просьбы это сделать, то ли еще что - не знаю. Но факт в том, что уже четвертый пост подряд я тебя прошу сформулировать, а ты ни в какую.

Вот именно из-за этого так долго разговаривали с Cash"ем. Тоже самое, абсолютно :)

Я его из поста в пост спрашивал одно и тоже, а он из поста в пост писал ВСЕ ЧТО УГОДНО, но только не то, что я его спрашивал. Он обижался, говорил что я не понимаю, что я издеваюсь, прикалываюсь, приводил цитаты, задавал встречные вопросы, но в результате так на мой вопрос и не ответил! :) Это я считаю самым забавным.

И сейчас с тобой тоже самое. Понимаешь, когда ты оцениваешь кого-то и говоришь "А я могу лучше сделать" - то не удивляйся если тебе в ответ скажут "Ну так сделай". И ты должен быть готов это сделать ЛУЧШЕ, иначе не имеет смысла говорить, что можно лучше.

Вот и все, невинная фраза. Я так понял, ты сказал, что можешь сформулировать ЛУЧШЕ. Я тебя просто попросил - СФОРМУЛИРУЙ тогда.
Ты уже написал немало постов, но так и не сформулировал.

Извини, но мне ничего больше не остается придумать, что ты просто НЕ можешь сформулировать.


 
AlexanderMS ©   (2006-06-04 17:19) [114]

Удивительно, что ветка с таким лёгким вопросом, на который уже давно дан ответ, до сих пор держится на первой странице форума в первой тройке!


 
Nous Mellon_   (2006-06-04 19:42) [115]

Мишка, ты просто красавчик!



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

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

Наверх




Память: 0.86 MB
Время: 0.089 c
4-1143621713
Svetlika
2006-03-29 12:41
2006.07.02
Как показать окно первого экземпляра из второго?


2-1148848191
Олег_
2006-05-29 00:29
2006.07.02
Общие


15-1147688699
Евгений Р.
2006-05-15 14:24
2006.07.02
OnDblClick в DrawGrid


1-1148157851
learner
2006-05-21 00:44
2006.07.02
Сохранение коллекции в потоке.


2-1150370616
КиТаЯц
2006-06-15 15:23
2006.07.02
Форма из DLL поверх вызвавшего окна