Add ability to expose bytes as a hex string without a prefix
diff --git a/bytes/src/main/java/org/apache/tuweni/bytes/Bytes.java b/bytes/src/main/java/org/apache/tuweni/bytes/Bytes.java
index 36d00ce..ea7c347 100644
--- a/bytes/src/main/java/org/apache/tuweni/bytes/Bytes.java
+++ b/bytes/src/main/java/org/apache/tuweni/bytes/Bytes.java
@@ -1440,6 +1440,18 @@
     }
   }
 
+  /**
+   * @return This value represented as hexadecimal, with no prefix.
+   */
+  default String toUnprefixedHexString() {
+    try {
+      return appendHexTo(new StringBuilder()).toString();
+    } catch (IOException e) {
+      // not thrown
+      throw new RuntimeException(e);
+    }
+  }
+
   /** @return This value represented as a minimal hexadecimal string (without any leading zero). */
   default String toShortHexString() {
     StringBuilder hex;
diff --git a/bytes/src/test/java/org/apache/tuweni/bytes/CommonBytesTests.java b/bytes/src/test/java/org/apache/tuweni/bytes/CommonBytesTests.java
index f3fcf28..c7aee0e 100644
--- a/bytes/src/test/java/org/apache/tuweni/bytes/CommonBytesTests.java
+++ b/bytes/src/test/java/org/apache/tuweni/bytes/CommonBytesTests.java
@@ -434,6 +434,17 @@
   }
 
   @Test
+  void testHexString() {
+    assertEquals("0x", h("0x").toShortHexString());
+    assertEquals("0x", h("0x0000").toShortHexString());
+    assertEquals("0x1000001", h("0x01000001").toShortHexString());
+
+    assertEquals("0000", h("0x0000").toUnprefixedHexString());
+    assertEquals("1234", h("0x1234").toUnprefixedHexString());
+    assertEquals("0022", h("0x0022").toUnprefixedHexString());
+  }
+
+  @Test
   void slideToEnd() {
     assertEquals(Bytes.of(1, 2, 3, 4), Bytes.of(1, 2, 3, 4).slice(0));
     assertEquals(Bytes.of(2, 3, 4), Bytes.of(1, 2, 3, 4).slice(1));