Solidity University

Bytes

bytes in solidity
Photo by Markus Spiske / Unsplash

Bytes (тип данных в Solidity)

Bytes - тип данных, хранящий последовательность байтов произвольной длины. Байтовые массивы могут использоваться для реализации различных функций, таких как шифрование, хеширование, компрессия данных и т.д.

Все данные на низком уровне в EVM хранятся с прямым порядком байтов. Ethereum и EVM — это виртуальная машина, использующая формат Big Endian. EVM использует 32-байтовые массивы для управления данными.

Способы работы с Bytes

В Solidity есть различные способы работы с байтами. Вот некоторые из наиболее распространенных:

Динамические байтовые массивы

bytes: Это динамический массив байтов, содержащий произвольное количество байтов. Создается переменная bytes, следующим образом:

bytes memory myBytes = new bytes(10);

Таким образом мы создали переменную bytes с именем myBytes, которая содержит 10 байтов.

Фиксированные байтовые массивы

Фиксированные байтовые массивы bytes1, bytes2, bytes3, ..., bytes32 содержат от 1 до 32 байтов. Создать переменную bytes2, можно, так:

bytes2 myBytes = 0x1234;

Мы задали переменную bytes2 с именем myBytes и присвоили ей значение 0x1234.

Если вы можете ограничится конкретной длиной лучше использовать фиксированные байтовые массивы от bytes1 до bytes32, для экономии gas.

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

Битовые операции в Solidity

В Solidity доступы следующие битовые операторы:

  • & (AND)
  • | (OR)
  • ^ (XOR)
  • ~ (NEGATION)

Для эксперимента мы будем использовать тип данных bytes1 ( тоже самое, что и byte ) для двух переменных : a и b. Мы инициализируем их в Solidity, используя их шестнадцатеричное представление и будем применять к ним операции and, or, xor, negation.

    bytes1 a = 0xb5; //  [10110101]
    bytes1 b = 0x56; //  [01010110]

Операция & (AND) или (логическое И)

Возвращает результат, который является битовым И каждого соответствующего бита двух операндов.

Логическое И по отношению к байтам в солидити
a & b; // Result: 0x14  [00010100]

Операция | (OR) или (логическое ИЛИ)

Возвращает результат, который является битовым ИЛИ каждого соответствующего бита двух операндов.

Логическое ИЛИ по отношению к байтам в солидити
a | b; // Result: 0xf7  [11110111]

Операция ^ (XOR) или (исключающее ИЛИ)

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

Исключающее ИЛИ по отношению к байтам в солидити
a ^ b; // Result: 0xe3  [11100011]

Операция ~ (NEGATION) или (логическое Отрицание)

Инвертирует каждый бит в операнде.

Логическое отрицание по отношению к байтам в солидити
uint1 a = 0xb5; // 10110101
uint1 b = ~a;   // 01001010

Операции смещения

В Solidity можно применять операции смещения вправо или влево по отношению к битам:

  • << (сдвиг влево): Сдвигает биты в операнде на указанное количество позиций влево.
uint8 a = 0x0c; // 00001100
uint8 b = a << 2; // 00110000
  • >> (сдвиг вправо): Сдвигает биты в операнде на указанное количество позиций вправо.
uint8 a = 0x0c; // 00001100
uint8 b = a >> 2; // 00000011

Операторы сравнения

К байтовым массивам можно применять операторы сравнения, в следствии чего будет возвращена логическая переменная bool со значением true или false. Доступные операторы сравнения байтовых массивов в языке программирования Solidity:

  • <= меньше или равно;
  • < меньше;
  • == равно;
  • != не равно;
  • >= больше или равно;
  • > больше;


Подпишись и получи доступ к бесплатным курсам и обучающим материалам от Solidity University! Изучай Solidity и Блокчейн Разработку вместе с нами!

Информация об авторе
Nick Newermin

Nick Newermin

Привет! Меня зовут Николай, я занимаюсь web3 разработкой уже более пяти лет, веду канал "Блокчейн Разработчик" и создаю образовательную онлайн платформу Solidity University. #Web3ForEveryone

Solidity University

Подпишись и получи бесплатный доступ к нашим курсам и обучающим материалам

Solidity University

Отлично! Вы успешно зарегистрировались.

С возвращением! Вы успешно вошли в систему.

Вы успешно подписались на Solidity University.

Успех! Проверьте вашу электронную почту для входа по магической ссылке.

Успех! Ваши платежные данные обновлены.

Ваши платежные данные не были обновлены.