KIT

解码器

Decoder<TTo> = FixedSizeDecoder<TTo> | VariableSizeDecoder<TTo>

一个可以将字节数组解码为 TTo 类型值的对象。

Decoder 可以是:

类型参数

类型参数描述
TTo解码值的类型。

示例

从字节数组中获取解码后的值。

const decoder: Decoder<string>;
const value = decoder.decode(bytes);

从特定偏移量的字节数组中读取解码后的值, 并获取下一个要读取的字节的偏移量。

const decoder: Decoder<string>;
const [value, nextOffset] = decoder.read('hello', bytes, 20);

备注

你可以使用 createDecoder 函数手动创建 Decoders,但更常见的是 使用 @solana/codecs 包的各种助手函数将多个 Decoders 组合在一起。

例如,以下是如何为一个包含 name 字符串和 age 数字的 Person 对象类型创建一个 Decoder

import { getStructDecoder, addDecoderSizePrefix, getUtf8Decoder, getU32Decoder } from '@solana/codecs';
 
type Person = { name: string; age: number };
const getPersonDecoder = (): Decoder<Person> =>
    getStructDecoder([
        ['name', addDecoderSizePrefix(getUtf8Decoder(), getU32Decoder())],
        ['age', getU32Decoder()],
    ]);

请注意,组合的 Decoder 类型足够聪明,可以理解它们是固定大小还是可变大小。 在上面的例子中,getU32Decoder() 是一个 固定大小的解码器,而 addDecoderSizePrefix(getUtf8Decoder(), getU32Decoder()) 是一个可变大小的解码器。 这使得最终的 Person 解码器成为一个可变大小的解码器。

参见

On this page