Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.022 c
3-1146664555
Александр1
2006-05-03 17:55
2006.07.02
Соединение с табличкой DBF


2-1149601521
JustNick
2006-06-06 17:45
2006.07.02
Работа с DBCombobox


2-1150270626
Olleg_ator
2006-06-14 11:37
2006.07.02
Исправить структуру dbf таблицы


1-1148236089
partizan
2006-05-21 22:28
2006.07.02
Умножение длинных чисел


15-1149584884
Kerk
2006-06-06 13:08
2006.07.02
Бойцовский клуб





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