Add Strings.toHexString(bytes) (#5761)

This commit is contained in:
Hadrien Croubois
2025-07-09 22:20:46 +02:00
committed by GitHub
parent fd9bbaec30
commit a5350ecdd3
3 changed files with 33 additions and 0 deletions

View File

@ -0,0 +1,5 @@
---
'openzeppelin-solidity': minor
---
`Strings`: Add `toHexString(bytes)`.

View File

@ -128,6 +128,23 @@ library Strings {
return string(buffer);
}
/**
* @dev Converts a `bytes` buffer to its ASCII `string` hexadecimal representation.
*/
function toHexString(bytes memory input) internal pure returns (string memory) {
unchecked {
bytes memory buffer = new bytes(2 * input.length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 0; i < input.length; ++i) {
uint8 v = uint8(input[i]);
buffer[2 * i + 2] = HEX_DIGITS[v >> 4];
buffer[2 * i + 3] = HEX_DIGITS[v & 0xf];
}
return string(buffer);
}
}
/**
* @dev Returns true if the two strings are equal.
*/

View File

@ -186,6 +186,17 @@ describe('Strings', function () {
});
});
describe('bytes', function () {
describe('toHexString', function () {
for (const length of [0, 17, 20, 32, 42, 64, 512]) {
const input = ethers.hexlify(ethers.randomBytes(length));
it(`hexlify buffer of length ${length}`, async function () {
expect(await this.mock.getFunction('$toHexString(bytes)')(input)).to.equal(input);
});
}
});
});
describe('equal', function () {
it('compares two empty strings', async function () {
expect(await this.mock.$equal('', '')).to.be.true;