LINUX.ORG.RU

[Любознательности тред] Почемы байты записывают задом на перед?


0

1

Доброго времени!
В рамках одного проекта, возникла задача определять размер картинок, не скачивая их полностью. Для определения размера достаточно скачать только заголовок.
У меня получилось, что определения размера нужно скачать:
JPG - 192 байта
PNG - 24 байта
GIF - 10 байт

Примечательно, что в JPG и PNG для получения значений ширины и высоты мне было необходимо разворачивать байты, они шли в противоположном порядке, а вот с GIF такого небыло, там все идет в нужном порядке.

Вопросы: Почему в GIF байты не развернуты? Собственно еще интересует, что почитать на тему низкоуровневой работы с памятью? Я смутно помню, со школы, как препод говорил в памяти все данные записаны задом на перед, так ли это?


противоположном порядке

нет такого порядка, есть little-endian и big-endian, и еще варианты

записаны задом на перед

сначала определи, что есть «зад» и где «перед» в памяти :)

Harald ★★★★★
()
Ответ на: комментарий от Harald

сначала определи, что есть «зад» и где «перед» в памяти

А что не так?

buddhist ★★★★★
()

Спасибо всем! Немного просвятился/освежил знания, вроде, не понял еще. А почему же таки в GIF все записано в обычном порядке(little-endian) как я понял?

Seraph
() автор топика

Есть прямо и обратный порядок байт. У каждого есть свои достоинства и недостатки.

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

Но у обратного порядка байт есть одно важное преимущество: в случае обращения к переменной, как к переменной меньшей размерности (например 4 байта воспринять лишь как 1 первый), то старшие разряды отсекуться («переполнение»), а мы получим младшую часть. Это очень логично.

KivApple ★★★★★
()
Ответ на: комментарий от Seraph

А почему же таки в GIF все записано в обычном порядке(little-endian) как я понял?

Потому что авторы гифа — остроконечники.

const86 ★★★★★
()
Ответ на: комментарий от KivApple

>Это очень логично.


Ну и плюс, как уже было сказано про память — более старшие байты оказываются выше. Тоже логично :)

Опять же, при суммировании с переносом можно читать из памяти по мере возрастания и тут же складывать.

И т.п.

Я «остроконечник»^W убеждённый литлэндианщик :)

KRoN73 ★★★★★
()

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

Seraph
() автор топика
Ответ на: >Это очень логично. от KRoN73

Я «остроконечник»^W убеждённый литлэндианщик :)

Только бигэндиан, только хардкор

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.