Puedo ver que las conversiones de bytes a uint solían ser mucho más fáciles en versiones anteriores de solidity. Ahora, usando la misma sintaxis, me sale este error:
TypeError: conversión de tipo explícita no permitida de "bytes32" a "uint8"
Sé acerca de la biblioteca de Piper Merriam , pero no agregaría tanto código solo para una pequeña conversión de tipo. ¿No hay una forma más elegante?
Usando la solidez 0.5.2.
No creo que lo haya sido nunca porque bytes
es una matriz dinámica, byte
lo que significa que tiene un archivo length
. ¿Es posible que hayas visto bytes32
la conversión a unit
? Eso es totalmente aceptable ya que ambos son palabras de 32 bytes.
Esto compila bajo 0.4.25 también 0.5.2.
contract Bytes {
function convert(bytes32 b) public pure returns(uint) {
return uint(b);
}
}
Por otro lado, esta conversión es un problema en todos los casos que conozco.
contract Bytes {
function convert(bytes b) public pure returns(uint) {
return uint(b);
}
}
En mi opinión , la conversión de bytes
y string
a números, la manipulación de cadenas, etc. son cuestiones problemáticas que, por lo general , deberían ser tratadas por los clientes de software en lugar de sobrecargar los contratos con tales preocupaciones. Es un caso en el que el equipo del contrato debe resistirse fuertemente a sobrecargar el contrato con preocupaciones que los clientes de software son capaces de resolver.
Espero eso ayude.
Pablo Razvan Berg
bytes32
conversiónuint8
lo que vi. Interesante, ahora en solidity ^0.5 puedes haceruint(b)
pero no puedes haceruint8(b)
. Supongouint8(uint(b))
que funcionaría, pero me pregunto si hay algún lugar donde esto esté documentado. No pude encontrar nada en los documentos de solidez para 0.5.2Rob Hitchens