Как разобрать неполное слово в Cairo ByteArray
Cairo сериализует длинные байтовые строки полными словами по 31 байту и завершающим неполным словом. Если принять первое поле за общую длину в байтах, сместятся следующие аргументы.
Разберите две границы длины
У abc нет полных слов. Поэтому первый felt равен нулю, затем идут неполное слово и длина три. У строки ровно из 31 байта одно полное слово и пустой остаток.
ByteArray("abc") → [0, 0x616263, 3]
ByteArray(31 bytes) → [1, full_word, 0, 0]
Восстанавливайте каждое полное слово ровно в 31 байт. Неполное слово декодируйте в pending_word_len байт с сохранением ведущих нулей в рамках этой длины. Общая длина равна числу полных слов, умноженному на 31, плюс длина остатка.
Переходите к тексту после сборки байтов
Многобайтовый символ UTF-8 может пересекать границу слов. Соберите байты до проверки UTF-8. Произвольные данные сохраняйте в двоичном виде, чтобы замена недопустимых последовательностей не разрушила обратимость. starknet.io The Cairo Programming Language