Tengo una matriz bytes32[]. Convierto cadenas a bytes32 antes de que se agreguen a la matriz de la siguiente manera:
function stringToBytes32(string memory source) returns (bytes32 result) {
assembly {
result := mload(add(source, 32))
}
}
que convertirá la cadena en un hexadecimal como 0x5468697320697320612074657374206d65737361676520746861742077696c6c, por ejemplo.
Sin embargo, si la cadena convertida en bytes32 tiene más de 32 caracteres, no sé cómo volver a convertirla en su cadena original de más de 32 caracteres. Usar web3.toAscii
solo trae de vuelta los primeros 32 caracteres.
struct DocumentStruct{bytes32 string1; bytes32 string2; bytes32 string3;}
mapping(bytes32 => DocumentStruct) public documentStructs;
function StoreDocument(bytes32 key,bytes32 string1,bytes32 string2,bytes32 string3) onlyOwner returns (bool success) {
documentStructs[key].string1 = value;
documentStructs[key].string2 = name;
documentStructs[key].string3 = name;
return true;
}
function RetrieveData(bytes32 key) public constant returns(string,string,string) {
var d = bytes32ToString(documentStructs[key].string1);
var e = bytes32ToString(documentStructs[key].string2);
var f = bytes32ToString(documentStructs[key].string3);
return (d,e,f);
}
function bytes32ToString(bytes32 x) constant returns (string) {
bytes memory bytesString = new bytes(32);
uint charCount = 0;
for (uint j = 0; j < 32; j++) {
byte char = byte(bytes32(uint(x) * 2 ** (8 * j)));
if (char != 0) {
bytesString[charCount] = char;
charCount++;
}
}
bytes memory bytesStringTrimmed = new bytes(charCount);
for (j = 0; j < charCount; j++) {
bytesStringTrimmed[j] = bytesString[j];
}
return string(bytesStringTrimmed);
}
Esto funciona bastante bien para mí. Estoy de acuerdo en que es un poco complejo codificar y decodificar, pero simplemente ejecute su matriz de 32 bytes para recuperar una cadena
Editar - Aquí hay algunas cosas añadidas. Una forma un poco hacky, pero podría funcionar para usted. Sin embargo, estoy seguro de que Rob gritará ante esta respuesta.
Rob Hitchens
ZhouW
Rob Hitchens
ZhouW
Rob Hitchens