Символ или Конвенция для обозначения Endianness? - PullRequest
2 голосов
/ 18 февраля 2011

Существует ли символ или какое-либо другое соглашение для обозначения порядкового номера значения / переменной / что-у-вас в техническом письме?

То есть, если я хотел описать алгоритм или формулу и представить эту формулу в виде математического выражения (например, X = P + 2 / Y), есть ли способ указать порядковый номер одной из переменных?

Например:

Следующая формула показывает, как вычислить новое значение указателя, npnt.

При работе со старым значением указателя, хранящимся в переменной INT pnt, имейте в виду, что оно хранится с прямым порядком байтов, в то время как new и offset имеют старший порядковый номер. Для выполнения математических операций с использованием значения pnt необходимо изменить pnt на big-endian.

INT pnt = 0x1722

INT new = 0x900F

INT offset = 0xF600

npnt = offset + new - pnt

Это просто случайный пример. Главное, что меня беспокоит, - это сама формула - без объяснения, приведенного выше в абзаце, нет указаний на порядковый номер каждой переменной в формуле.

Решение, которое я придумала, состояло бы в том, чтобы надписать символ стрелки к переменным следующим образом:

npnt = смещение + new - pnt

Или, что еще лучше, поместите стрелки прямо над именами переменных (что я не могу сделать, используя ограниченный HTML SO).

Существует ли конвенция для этого? Или это то, что просто никогда не делается, потому что я в первую очередь описываю / представляю вещи неправильно?

1 Ответ

1 голос
/ 31 марта 2011

Для кроссплатформенной кодовой базы, над которой я работал, я использовал соглашение о добавлении _be к переменным в порядке байтов с прямым порядком байтов и _le для переменных в порядке байтов с младшим порядком байтов.Предполагалось, что все остальное находится в порядке байтов хоста.

Структуры, созданные для сетевых протоколов, использовали это именование, поэтому было очень ясно, с каким порядком байтов вы имели дело.Нам приходилось иметь дело как с большими, так и с малыми порядковыми значениями, и соблюдение этого соглашения очень помогло.

Если вы последовательны, очень трудно делать ошибки в вашем коде.Присвоение foo_be bar выглядит неправильно, а bar = be16toh( foo_be) выглядит просто правильно.

Если вы используете форматированный текст, вы можете использовать вложенный сценарий be или le влюбое значение или переменная не в порядке байтов хоста.

...