diff --git a/morphisms/include/morphisms/posint.h b/morphisms/include/morphisms/posint.h
index d44db28..3c96136 100644
--- a/morphisms/include/morphisms/posint.h
+++ b/morphisms/include/morphisms/posint.h
@@ -3,32 +3,33 @@
 #include <morphisms/length-prefix.h>
 
 int morph_digit_as_char_to_uint8(
-    char const * restrict src,
+    uint64_t const radix,
+    uint8_t const * restrict src,
     uint8_t * restrict dst
 );
 int morph_digit_as_char_to_uint64(
-    char const * restrict src,
+    uint64_t const radix,
+    uint8_t const * restrict src,
     uint64_t * restrict dst
 );
 int morph_digit_as_uint8_to_char(
+    uint64_t const radix,
     uint8_t const * restrict src,
-    char * restrict dst
+    uint8_t * restrict dst
 );
 int morph_digit_as_uint64_to_char(
+    uint64_t const radix,
     uint64_t const * restrict src,
-    char * restrict dst
+    uint8_t * restrict dst
 );
-
 int morph_posint_endianness(
     uint64_t const radix,
-
     struct LengthPrefixUInt64Array const * restrict src,
     struct LengthPrefixUInt64Array * restrict dst
 );
 int morph_posint_radix(
     uint64_t const src_radix,
     uint64_t const dst_radix,
-
     struct LengthPrefixUInt64Array const * restrict src,
     struct LengthPrefixUInt64Array * restrict dst
 );
diff --git a/morphisms/src/posint.c b/morphisms/src/posint.c
index 65292a9..32503c8 100644
--- a/morphisms/src/posint.c
+++ b/morphisms/src/posint.c
@@ -2,7 +2,8 @@
 #include <morphisms/length-prefix.h>
 
 int morph_digit_as_char_to_uint8(
-    char const * restrict src,
+    uint64_t const radix,
+    uint8_t const * restrict src,
     uint8_t * restrict dst
 ) {
     if( *src >= '0' && *src <= '9' )
@@ -18,24 +19,17 @@ int morph_digit_as_char_to_uint8(
 }
 
 int morph_digit_as_char_to_uint64(
-    char const * restrict src,
+    uint64_t const radix,
+    uint8_t const * restrict src,
     uint64_t * restrict dst
 ) {
-    if( *src >= '0' && *src <= '9' )
-        *dst = *src - '0';
-    else if( *src >= 'a' && *src <= 'f')
-        *dst = 0xa + *src - 'a';
-    else if( *src >= 'A' && *src <= 'F')
-        *dst = 0xa + *src - 'A';
-    else
-        return -1;
-
-    return 0;
+    return morph_digit_as_char_to_uint8(radix, src, dst);
 }
 
 int morph_digit_as_uint8_to_char(
+    uint64_t const radix,
     uint8_t const * restrict src,
-    char * restrict dst
+    uint8_t * restrict dst
 ) {
     if ( *src < 10 )
         *dst = *src + '0';
@@ -48,17 +42,11 @@ int morph_digit_as_uint8_to_char(
 }
 
 int morph_digit_as_uint64_to_char(
+    uint64_t const radix,
     uint64_t const * restrict src,
-    char * restrict dst
+    uint8_t * restrict dst
 ) {
-    if ( *src < 10 )
-        *dst = *src + '0';
-    else if( *dst < 16 )
-        *dst = *src - 0xa + 'a';
-    else
-        return -1;
-
-    return 0;
+    return morph_digit_as_uint8_to_char(radix, src, dst);
 }
 
 /* switches endianness by reversing the digit sequence