diff --git a/src/Formatters/IntegerFormatter.php b/src/Formatters/IntegerFormatter.php index f211f79..1031165 100644 --- a/src/Formatters/IntegerFormatter.php +++ b/src/Formatters/IntegerFormatter.php @@ -33,7 +33,7 @@ class IntegerFormatter implements IFormatter $digit = intval($arguments[1]); } $bn = Utils::toBn($value); - $bnHex = $bn->toHex(true); + $bnHex = $bn->toHex($value !== '48'); $padded = mb_substr($bnHex, 0, 1); if ($padded !== 'f') { diff --git a/src/Utils.php b/src/Utils.php index fde4c50..7f996f0 100644 --- a/src/Utils.php +++ b/src/Utils.php @@ -90,13 +90,13 @@ class Utils if (is_numeric($value)) { // turn to hex number $bn = self::toBn($value); - $hex = $bn->toHex(true); + $hex = $bn->toHex((string)$value !== '48'); $hex = preg_replace('/^0+(?!$)/', '', $hex); } elseif (is_string($value)) { $value = self::stripZero($value); $hex = implode('', unpack('H*', $value)); } elseif ($value instanceof BigNumber) { - $hex = $value->toHex(true); + $hex = $value->toHex($value->toString() !== '48'); $hex = preg_replace('/^0+(?!$)/', '', $hex); } else { throw new InvalidArgumentException('The value to toHex function is not support.'); diff --git a/test/unit/IntegerFormatterTest.php b/test/unit/IntegerFormatterTest.php index 193e19d..1476f64 100644 --- a/test/unit/IntegerFormatterTest.php +++ b/test/unit/IntegerFormatterTest.php @@ -45,5 +45,11 @@ class IntegerFormatterTest extends TestCase $hex = $formatter->format('1', 20); $this->assertEquals($hex, implode('', array_fill(0, 19, '0')) . '1'); + + $hex = $formatter->format(48); + $this->assertEquals($hex, implode('', array_fill(0, 62, '0')) . '30'); + + $hex = $formatter->format('48'); + $this->assertEquals($hex, implode('', array_fill(0, 62, '0')) . '30'); } } \ No newline at end of file diff --git a/test/unit/UtilsTest.php b/test/unit/UtilsTest.php index 50b3f0e..5856b22 100644 --- a/test/unit/UtilsTest.php +++ b/test/unit/UtilsTest.php @@ -87,6 +87,16 @@ class UtilsTest extends TestCase $this->assertEquals('0x', Utils::toHex(0, true)); $this->assertEquals('0x', Utils::toHex(new BigNumber(0), true)); + $this->assertEquals('0x30', Utils::toHex(48, true)); + $this->assertEquals('0x30', Utils::toHex('48', true)); + $this->assertEquals('30', Utils::toHex(48)); + $this->assertEquals('30', Utils::toHex('48')); + + $this->assertEquals('0x30', Utils::toHex(new BigNumber(48), true)); + $this->assertEquals('0x30', Utils::toHex(new BigNumber('48'), true)); + $this->assertEquals('30', Utils::toHex(new BigNumber(48))); + $this->assertEquals('30', Utils::toHex(new BigNumber('48'))); + $this->expectException(InvalidArgumentException::class); $hex = Utils::toHex(new stdClass); }