官方给出的智能合约示例是一个投票程序,候选人candidate的数据类型是Bytes32。利用java SDK调用合约的 voteForCandidate(bytes32 candidate) 接口,发现一个问题:
我输入的参数“simmel”是string类型,而SDK中不提供将string类型转化为bytes32类型的函数。
又看到代码中涉及Bytes32型变量的地方都要求输入byte[](长度为32)而不是Bytes32,
于是自己写了一个将string转化为长为32的byte型数组的函数:
public static byte[] stringToBytes(String str){
byte[] result = new byte[32]; // 此时result的值为32个0
byte[] stringToByte = str.getBytes(); // 将string类型转化为byte[]类型
int len = stringToByte.length;
for(int i=0; i<len; i++){
result[i] = stringToByte[i]; // 将str里的值复制到result[]中
}
return result;
}
在使用时示例如下:
parameters.addBytes32(stringToBytes("simmel"));
问题解决~