digit morphisms: switch char to uint8_t

This commit is contained in:
Michael Sippel 2025-02-05 11:10:11 +01:00
parent 59c0ea8e57
commit 10dab73876
Signed by: senvas
GPG key ID: F96CF119C34B64A6
2 changed files with 18 additions and 29 deletions
morphisms
include/morphisms
src

View file

@ -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
);

View file

@ -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