rahul
August 30, 2023, 11:13am
1
From the official docs:
Hexadecimal literals in some ways behave like string literals but are not implicitly convertible to the string type.
Source: https://docs.soliditylang.org/en/v0.8.21/types.html#hexadecimal-literals
This may not be entirely accurate. I have observed that implicit conversion works fine PROVIDED that hex literal is encoded in UTF-8.
For example:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
contract Hex {
function HexToString() public pure returns (string memory x) {
//x = "hello"
x = hex"68656c6c6f";
}
}
Let me know if its worth while to update the documentation.
Tudmotu
September 1, 2023, 11:13am
2
Personally I believe this part of the docs is misleading.
As far as I understand, hex"" is more like bytes memory or a sort of literal_bytes and shares very few qualities with string memory. In the case you mentioned, hex"68656c6c6f" is virtually identical to bytes(string("hello")):
keccak256(bytes(string("hello"))) == keccak256(hex"68656c6c6f")
So I think that’s why it works with your code
1 Like
rahul
September 1, 2023, 11:18am
3
Yep! What you described makes sense intuitively. Which is what led my to try the code in the first place despite the docs saying it isn’t possible.
1 Like