java.lang.UnsupportedOperationException: Das Eingabe-Byte-Array muss im Bereich 0 < M <= 32 liegen und die Länge muss mit dem Typ übereinstimmen
Ich versuche, wie unten angegeben zu tun. Ich wollte die Leute hinzufügen, aber der in web3j generierte Wrapper hat den obigen Fehler ausgelöst:
String s = "Rahul";
//System.out.println(s.getBytes().length);
Bytes32 b1=new Bytes32(s.getBytes());
contract.addPerson(b1,new Uint256(new BigInteger("35"));
Es ist am besten, wann immer möglich die JVM-Laufzeitbibliothek zu verwenden; Dieser Code ist normalerweise von hoher Qualität, obwohl es Ausnahmen gibt. Im folgenden Code erstelle ich zuerst einen und leite byte[]
dann einen Hex-Wert ab, indem ich DatatypeConverter.printHexBinary aufrufe .
byte[] byteArray = "This string is converted to a byte array".getBytes();
String hexValue = javax.xml.bind.DatatypeConverter.printHexBinary(byteArray);
Ich bin mir nicht sicher, ob Sie noch eine Lösung benötigen, aber da dies noch unbeantwortet ist und für andere, die möglicherweise Bedarf haben.
str.getBytes()
gibt nur ein Byte dieser Zeichenfolge zurück, aber der tatsächliche Prozess ist nur lang.
Das Hauptproblem ist, Bytes32(byte[])
dass nur 32 Längen unterstützt werden byte[]
. Denken Sie auch daran, Numeric.hexStringToByteArray(strValueInHex)
jeden Hex-Wert von String in umzuwandeln byte[]
.
Dies ist der Prozess
Hinweis: "00"
= 1 Länge Hex & 2 Länge String
String => Hex => 32 length Hex (ie. 64 length HexString) => byte[] => Bytes32
So habe ich String to Bytes erreicht:
String bis 64 Länge 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"));
}
HexString der Länge 64 bis Byte[] der Länge 32:
byte[] myStringInByte = Numeric.hexStringToByteArray(asciiToHex("myString"));
32 Längenbyte[] bis Bytes32:
Bytes32 myStringInBytes32 = new Bytes32(myStringInByte);
byte[] byte = Numeric.hexStringToByteArray("String Value");
Aniket
Raul
Max Binnewies
Raul
Narayan Prusty
Praty