30 lines
1.2 KiB
Solidity
30 lines
1.2 KiB
Solidity
|
// SPDX-License-Identifier: MIT
|
||
|
pragma solidity =0.7.6;
|
||
|
|
||
|
library HexStrings {
|
||
|
bytes16 internal constant ALPHABET = '0123456789abcdef';
|
||
|
|
||
|
/// @notice Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
|
||
|
/// @dev Credit to Open Zeppelin under MIT license https://github.com/OpenZeppelin/openzeppelin-contracts/blob/243adff49ce1700e0ecb99fe522fb16cff1d1ddc/contracts/utils/Strings.sol#L55
|
||
|
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
|
||
|
bytes memory buffer = new bytes(2 * length + 2);
|
||
|
buffer[0] = '0';
|
||
|
buffer[1] = 'x';
|
||
|
for (uint256 i = 2 * length + 1; i > 1; --i) {
|
||
|
buffer[i] = ALPHABET[value & 0xf];
|
||
|
value >>= 4;
|
||
|
}
|
||
|
require(value == 0, 'Strings: hex length insufficient');
|
||
|
return string(buffer);
|
||
|
}
|
||
|
|
||
|
function toHexStringNoPrefix(uint256 value, uint256 length) internal pure returns (string memory) {
|
||
|
bytes memory buffer = new bytes(2 * length);
|
||
|
for (uint256 i = buffer.length; i > 0; i--) {
|
||
|
buffer[i - 1] = ALPHABET[value & 0xf];
|
||
|
value >>= 4;
|
||
|
}
|
||
|
return string(buffer);
|
||
|
}
|
||
|
}
|