[Решено] Как преобразовать "операционный код` в шестнадцатеричный?
-
В Проекте, нам нужно будет самим написать функции-оболочки.
Что еще более важно, когда мы кодируем "операционный код" в нашем функциональном коде, нам нужно декодировать строку в шестнадцатеричный операционный код, а затем преобразовать ее в типы данных uint и hex.
Например:
const op::increase = "op::increase"c; ;; create an opcode from a string using the "c" prefix; this results in the 0x7e8764ef opcode in this case.
Мой вопрос в том, как мы можем обобщить процесс для обычного преобразования строки в uint и шестнадцатеричные данные?
-
Вообще говоря, функциональный код
op::increase = "op::increase"c
сначала преобразует это вuint
(целое число без знака), поскольку в TVM (виртуальной машине Тьюринга) обмен данными осуществляется только в целых числах без знака, чтобы различать "неограниченные" функции, которые вы создаете.С другой стороны, "uint" может быть преобразован в "шестнадцатеричный" код, чтобы сэкономить место при его хранении в смарт-контракте.
**Вот пример в TypeScript для завершения преобразования операционного кода в uint и шестнадцатеричные данные. Он использует метод CRC32 для распаковки этой информации операционного кода. **
Код:
const POLYNOMIAL = -306674912; let crc32_table: Int32Array | undefined = undefined; export function crc32(str: string, crc = 0xFFFFFFFF) { let bytes = Buffer.from(str); if (crc32_table === undefined) { calcTable(); } for (let i = 0; i < bytes.length; ++i) crc = crc32_table![(crc ^ bytes[i]) & 0xff] ^ (crc >>> 8); return (crc ^ -1) >>> 0; } function calcTable() { crc32_table = new Int32Array(256); for (let i = 0; i < 256; i++) { let r = i; for (let bit = 8; bit > 0; --bit) r = ((r & 1) ? ((r >>> 1) ^ POLYNOMIAL) : (r >>> 1)); crc32_table[i] = r; } }
Как только мы вызовем функцию
crc32("депозит")
, мы сможем получить значение0xb04a29cf
на практике.Для получения дополнительной информации о методе CRC32 вы можете перейти по следующим ссылкам: