将字符串转换为bytes32以用于实体合约调用

时间:2018-12-26 21:37:47

标签: string perl

如何将Perl字符串转换为bytes32,如下面的Java函数:

public static Bytes32 stringToBytes32(String string) {
    byte[] byteValue = string.getBytes();
    byte[] byteValueLen32 = new byte[32];
    System.arraycopy(byteValue, 0, byteValueLen32, 0, byteValue.length);
    return new Bytes32(byteValueLen32);
}

CPAN中有可用的模块来执行此操作吗?

1 个答案:

答案 0 :(得分:3)

似乎所有这些功能都将字符串编码为字节,然后截断/填充它,因此结果恰好是32个字节长。

第一部分可能很棘手,因为according to the documentation

public byte[] getBytes()
     

使用平台的默认字符集将此String编码为字节序列,并将结果存储到新的字节数组中。

     

未指定在默认字符集中无法编码此字符串时此方法的行为。

Perl并没有“默认字符集”的概念,但是如果您愿意使用UTF-8,这并不难:

sub stringToBytes32 {
    my ($str) = @_;
    utf8::encode $str;
    return pack 'a32', $str;
}

(如果需要其他编码,请参见Encode::encode。)

pack非常适用于以二进制格式生成数据。在这里,我们使用它来截断/填充到32个字节。