Ethereumj
如何在 Java 中將 Java 字元串轉換為 Bytes32?我正在使用 web3j solidity 包裝器與智能合約進行互動。我收到以下錯誤:
java.lang.UnsupportedOperationException:輸入字節數組必須在範圍 0 < M <= 32 並且長度必須匹配類型
我正在嘗試按照下面給出的方式進行操作。我想添加人員,但在 web3j 中生成的包裝器拋出了上面的錯誤:
String s = "Rahul"; //System.out.println(s.getBytes().length); Bytes32 b1=new Bytes32(s.getBytes()); contract.addPerson(b1,new Uint256(new BigInteger("35"));
最好盡可能使用 JVM 執行時庫;儘管確實存在例外,但該程式碼通常質量很高。在下面的程式碼中,我首先創建一個
byte[]
,然後通過呼叫DatatypeConverter.printHexBinary派生一個十六進制值。byte[] byteArray = "This string is converted to a byte array".getBytes(); String hexValue = javax.xml.bind.DatatypeConverter.printHexBinary(byteArray);
不確定您是否仍然需要解決方案,但因為它仍然沒有答案,對於其他可能需要的人來說。
str.getBytes()
僅返回該字元串的字節,但實際過程很長。主要問題是
Bytes32(byte[])
只支持 32 長度byte[]
。還要記住Numeric.hexStringToByteArray(strValueInHex)
將 String 的任何十六進制值轉換為byte[]
.這是過程
注意:
"00"
= 1 個長度的十六進制和 2 個長度的字元串
String => Hex => 32 length Hex (ie. 64 length HexString) => byte[] => Bytes32
這是我如何實現字元串到字節:
字元串到 64 長度的 HexString:
// String to 64 length HexString (equivalent to 32 Hex lenght) public static String asciiToHex(String asciiValue) { char[] chars = asciiValue.toCharArray(); StringBuffer hex = new StringBuffer(); for (int i = 0; i < chars.length; i++) { hex.append(Integer.toHexString((int) chars[i])); } return hex.toString() + "".join("", Collections.nCopies(32 - (hex.length()/2), "00")); }
64 長度的 HexString 到 32 長度的字節
$$ $$:
byte[] myStringInByte = Numeric.hexStringToByteArray(asciiToHex("myString"));
32個長度字節
$$ $$到 Bytes32:
Bytes32 myStringInBytes32 = new Bytes32(myStringInByte);