Форум: "Прочее";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];
ВнизЗадачка Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.65 MB
Время: 0.02 c