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

Вниз

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

 
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

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



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

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

Наверх




Память: 0.66 MB
Время: 0.046 c
3-1147005977
wirg
2006-05-07 16:46
2006.07.02
нужна помощь


2-1150449400
Тимофей Юрьевич
2006-06-16 13:16
2006.07.02
условие


2-1150194744
JTAG
2006-06-13 14:32
2006.07.02
Господа, подскажите пожалуйста, как заменить иконку


6-1133100822
SergProger
2005-11-27 17:13
2006.07.02
Установить соединение с инетом


15-1149644353
Никос
2006-06-07 05:39
2006.07.02
Общее