[Решено] Что здесь означает `Big-endian по умолчанию`?
-
В техническом документе TVM мы получили это в главе 3.2.8:
Целые числа в ячейках по умолчанию имеют большой порядок следования. > Обратите внимание, что > порядок битов в целых числах s, сериализованных в ячейки по умолчанию, является большим, а не меньшим.14 В этом отношении TVM - это машина с большим концом. Однако это > влияет > только на сериализацию целых чисел внутри ячеек. Внутреннее представление типа целочисленного значения зависит от реализации и не имеет отношения к работе TVM. Кроме того, существуют некоторые специальные примитивы, такие как STULE > для (де) сериализации целых чисел с малым порядком следования, которые должны быть сохранены в виде целого числа байт (в противном случае “порядок следования с малым порядком следования” не имеет смысла, если только вы также не хотите изменить порядок битов внутри октетов). Такие > примитивы > полезны для взаимодействия с миром little-endian — например, для > разбора > сообщений пользовательского формата, поступающих в смарт-контракт TON Blockchain из > внешнего мира.
Пожалуйста, поделитесь со мной, что это такое и почему это важно
Ссылка: https://docs.ton.org/tvm.pdf
-
В целом
В порядке байтов с большим числом байтов **самый значимый байт (MSB) хранится по самому низкому адресу памяти, а наименее значимый байт (LSB) хранится по самому высокому адресу памяти.
Это также известно как сетевой порядок байтов, потому что это формат, используемый в интернет-протоколах, таких как TCP/IP в целом.
Биг-энд в TVM
В TVM целые числа внутри ячеек по умолчанию сериализуются с использованием формата big-endian. Это означает, что когда целое число преобразуется в последовательность байтов для сохранения, самый старший байт помещается в начало.
Пример 1: Сериализация с большим порядком байтов
Рассмотрим 16-разрядное целое число
0xABCD
. В формате big-endian он будет сохранен в виде:0xAB 0xCD
Little-Endian со специальными примитивами
В тексте также упоминаются специальные примитивы, такие как
STULE
, которые позволяют (де) сериализовать целые числа с малым порядком следования. В системе с младшим порядком байтов первым сохраняется наименее значимый байт.Пример 2: Сериализация в строгом порядке
Используя little-endian для того же целого числа
0xABCD
, оно будет сохранено как:0xCD 0xAB
Отношение к TVM
- По умолчанию используется Big-Endian : TVM использует big-endian для стандартной сериализации целых чисел внутри ячеек, что делает его машиной с большим порядком байтов в этом отношении.
- Внутреннее представление: Внутреннее представление целых чисел в TVM зависит от реализации и не имеет отношения к тому, как работает TVM.
- Примитивы с литтл-эндианом : Доступны специальные примитивы для обработки целых чисел с литтл-эндианом, которые могут быть полезны при взаимодействии с системами или форматами данных, использующими литтл-эндиан. Это может быть важно для анализа пользовательских сообщений из внешних источников.
Краткое описание
Понимание последовательности имеет жизненно важное значение при работе с низкоуровневыми манипуляциями с данными в TVM.
По умолчанию TVM использует big-endian, но при необходимости существуют инструменты для обработки данных в формате little- endian.
Выбор между big-endian и little-endian влияет на то, как данные считываются из памяти и записываются в нее, поэтому важно знать, какой конкретный формат используется в контексте TVM или любой другой системы, с которой вы работаете.