Методы определения длины строки в Solidity: примеры и фрагменты кода

Метод 1: использование типа bytes

function getStringLength(bytes memory str) public pure returns (uint) {
    return str.length;
}

В Solidity строки представлены как массивы байтов. Тип bytesимеет встроенное свойство length, которое возвращает количество байтов в строке.

Метод 2: использование bytes32

function getStringLength(string memory str) public pure returns (uint) {
    bytes32 strBytes = bytes32(uint256(keccak256(abi.encodePacked(str))));
    uint length = 0;
    while (strBytes[length] != 0) {
        length++;
    }
    return length;
}

В этом методе мы преобразуем строку в тип bytes32, который можно рассматривать как массив байтов. Затем мы перебираем байты, пока не найдем нулевой терминатор (байт со значением 0), указывающий на конец строки.

Метод 3: использование bytesи abi.encodePacked

function getStringLength(string memory str) public pure returns (uint) {
    return bytes(str).length;
}

В этом методе мы преобразуем строку в тип bytesи напрямую обращаемся к ее свойству length.

Обратите внимание, что третий метод более экономичен по газу по сравнению со вторым методом. Эффективность использования газа является важным фактором в Solidity для оптимизации затрат на выполнение смарт-контрактов в сети Ethereum.