如何将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中有可用的模块来执行此操作吗?
答案 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个字节。