Как стать автором
Обновить

Комментарии 31

Порадовал в свое время несказанно порядок байт на каком-то арме, для double: efghabcd.
В итоге для формата сохранения под разные архитектуры, написал что-то вроде QDataStream, только порядок байт более гибко задается.
uint8_t mask = (ORDER_LE | ORDER_LE << 1 | ORDER_BE << 2), вроде такого. и для float и int-ов отдельно. зато вычисляется такая маска один раз, и потом все довольно просто
dest[mask ^ 0] = src[0];
dest[mask ^ 1] = src[1];
dest[mask ^ 2] = src[2];
dest[mask ^ 3] = src[3];
Вспомнилась замечательная платформа C2000 от TI, где данные адресуются по 16 бит и sizeof(uint16) == 1. Очень весело отлаживать при первом знакомстве.
В статье, к сожалению, очень много неточностей я бы не рекомендовал ее для серьезного чтения (это претензия к автору, а не к переводчику).

Во-первых байт это не «последовательность из восьми бит» в которой «биты нумеруются справа налево», а минимальная адресуемая структура памяти и левых и правых битов или иной их нумерации или выделения битов внутри байта с точки зрения адресации нет, писать так совершенно некорректно. Выше упомянули платформу с размером байта в 16 бит. Байт, по определению он не разделяется логически с точки зрения адресации, биты в нем можно выделить исключительно по значению самого байта. То, что обычно при схематическом изображении на доске/бумаге/мониторе байт разделяют на биты и справа записывают младший бит — не более чем условность изображения. К байту следует относиться как к одному значению, чаще всего 256-ричному.

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

Маркер последовательности байтов фактически используется — при хранении текста в кодировке UTF-16 (т.к позволяет различать big endian и little endian только для 16-битных значений).

Необходимость конвертировать данные через ntoh*/hton* определяется не платформой получателя, а сетевым протоколом. Большая часть стандартизованных протоколов используется сетевой (прямой) порядок байт.

Каждый компьютер одного типа имеет внутреннюю совместимость (он может считывать свои собственные данные), но нет никакой гарантии, как именно интерпретирует эти данные компьютер другого типа.


Это не так, например все последние версии платформ MIPS и ARM имеют возможность работать как в big endian так и в little endian режимах. Есть разные сборки Linux, например, под один и тот же процессор работающий в little endian или в bin endian режимах.
Какая-то слишком маленькая статья для объяснения, что одни байты идут 1234, другие — 4321. Не пробовали написать трёхтомник «Биты и байты — неизвестный мир компьютеров»?
Совершенно с вами согласен.
Особенно если учесть, что Петцольд написал научно-популярную книгу «Code: The Hidden Language of Computer Hardware and Software», которая достаточно объемиста.
а ведь есть еще и триты
НЛО прилетело и опубликовало эту надпись здесь
Да и тестировать числа на четность тоже приходится слегка реже, чем через оператор. Да и у четного числа не последний байт ноль, а последний бит.
Левая статья. И слишком «полноводная» (много воды) для такой простой темы.
НЛО прилетело и опубликовало эту надпись здесь
Пром. контроллеры, например.
позволяют делать даже побитовую выборку без работы с масками

И там данная проблема как раз актуальна: для того, чтобы обратиться, например, к биту 1.0 в ПЛК, в hmi приходится обращаться к биту 0.0.
Узнаю брата Колю :))
А именно, Сименс. Насколько я знаю, причина в том, что изначально контроллеры на мотороловских процах (или подобных), а они big-endian. HMI же основан на Intel, а он small-endian.
Статья неплохая в качестве ликбеза, но требует вычитки — много мелких ляпов на русском языке.
В языке С, когда вы кастите (конвертируете) указатель к конкретному типу

cast — приводить, casting соотв. — приведение.
Не статья, а вода. На вики и то больше информации.
является число нечетным или четным (последний байт 0)


госпади исусе!
Имхо, достаточно было пример с римскими цифрами IV и VI, к примеру, разобрать. Автор словно гнался за объемом текста.
НЛО прилетело и опубликовало эту надпись здесь
Извините, но калькулятор в Windows с Вами не согласен :)
НЛО прилетело и опубликовало эту надпись здесь
Ну давайте сверятся… Я выбрал режим Programmer. Переключил радиокнопку на hex. Набрал 12 и переключил радиокнопку на bin, что приводит к конвертации числа в другой тип. Согласно этому, Ваш вариант — это А или же 10…
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Видимо уже очень поздно и я что-то упускаю… У Вас есть байт в памяти со значением 00010010 = oct 22 = dec 18 = hex 12. Что не так?
НЛО прилетело и опубликовало эту надпись здесь
Ну тогда напишите вычисления, с помощью которых у Вас получился такой результат…
НЛО прилетело и опубликовало эту надпись здесь
К сожалению, ссылка битая.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации