diff --git a/include/std.h b/include/std.h index 25b9661..27416e8 100755 --- a/include/std.h +++ b/include/std.h @@ -20,6 +20,7 @@ typedef int64_t i64; typedef uint64_t u64; typedef float f32; typedef double f64; +typedef void* ptr; #if !__cplusplus typedef u8 bool; @@ -33,7 +34,7 @@ typedef const char* cstr; #define nameof(V) #V -#define ARRAY_SIZE(A) (sizeof(A)/sizeof(A[0])) +#define ARRAY_LEN(A) (sizeof(A)/sizeof(A[0])) #define ALIGN_TO(_SIZE,_ALIGN) (((_SIZE) + ((_ALIGN) - 1)) & ~((_ALIGN) - 1)) #if defined(_WIN64) || defined(_WIN32) diff --git a/include/string/StringBuilder.h b/include/string/StringBuilder.h index d9d0861..726251d 100755 --- a/include/string/StringBuilder.h +++ b/include/string/StringBuilder.h @@ -21,7 +21,7 @@ void StringBuilder_append_str(StringBuilder* b, str s); void StringBuilder_append_i64(StringBuilder* b, i64 a); void StringBuilder_append_u64(StringBuilder* b, u64 a); void StringBuilder_append_f64(StringBuilder* b, f64 a); -void StringBuilder_append_memory(StringBuilder* b, Array mem); +void StringBuilder_append_memory(StringBuilder* b, Array mem, bool uppercase); // adds '\0' to the buffer and returns pointer to buffer content str StringBuilder_getStr(StringBuilder* b); diff --git a/include/string/str.h b/include/string/str.h index 2d83c49..4fe479e 100755 --- a/include/string/str.h +++ b/include/string/str.h @@ -3,6 +3,7 @@ #include "../std.h" #include "char.h" #include "cstr.h" +#include "../collections/Array.h" typedef struct str { char* data; @@ -11,7 +12,7 @@ typedef struct str { } str; /// creates str from a string literal -#define STR(LITERAL) str_construct(LITERAL, ARRAY_SIZE(LITERAL) - 1, true) +#define STR(LITERAL) str_construct(LITERAL, ARRAY_LEN(LITERAL) - 1, true) #define str_construct(DATA, LEN, ZERO_TERMINATED) ((str){ .data = DATA, .size = LEN, .isZeroTerminated = ZERO_TERMINATED }) @@ -41,3 +42,5 @@ u32 str_hash32(str s); str str_toUpper(str src); str str_toLower(str src); + +str hex_to_str(Array buf, bool uppercase); \ No newline at end of file diff --git a/src/string/StringBuilder.c b/src/string/StringBuilder.c index cc9cac0..b13227e 100755 --- a/src/string/StringBuilder.c +++ b/src/string/StringBuilder.c @@ -55,13 +55,13 @@ void StringBuilder_append_f64(StringBuilder* b, f64 n){ StringBuilder_append_cstr(b, buf); } -void StringBuilder_append_memory(StringBuilder* b, Array mem) { +void StringBuilder_append_memory(StringBuilder* b, Array mem, bool uppercase) { if(mem.data == NULL) return; char buf[8]; for (u32 i=0; i < mem.size; i++) { - sprintf(buf, "%02x", ((u8*)mem.data)[i]); + sprintf(buf, uppercase ? "%02X" : "%02x", ((u8*)mem.data)[i]); StringBuilder_append_str(b, str_construct(buf, 2, true)); } } diff --git a/src/string/str.c b/src/string/str.c index 748b0a5..83e7fec 100755 --- a/src/string/str.c +++ b/src/string/str.c @@ -1,4 +1,5 @@ #include "string/str.h" +#include "string/StringBuilder.h" str str_copy(str src){ if(src.data == NULL || src.size == 0) @@ -123,3 +124,9 @@ str str_toLower(str src){ } return r; } + +str hex_to_str(Array buf, bool uppercase){ + StringBuilder sb = StringBuilder_alloc(buf.size * 2 + 1); + StringBuilder_append_memory(&sb, buf, uppercase); + return StringBuilder_getStr(&sb); +}