2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
|
) {
size_t hex_pos = data_len << 1;
for (size_t data_pos = 0; data_pos < data_len; data_pos++) {
hex_pos -= 2;
__Hex_fromByte__(&hex[hex_pos], data[data_pos]);
}
}
// AP
// pack
// # __FormatsAp_packNibble__
size_t __FormatsAp_packNibble__(char* buffer, char data) {
if (data <= 16) {
*buffer = 'A' + data;
}
return 1;
}
// # __FormatsAp_packByte__
size_t __FormatsAp_packByte__(
char* buffer,
char byte
) {
size_t writed = 0;
writed += __FormatsAp_packNibble__(&buffer[writed], (byte & 0xF0) >> 4);
writed += __FormatsAp_packNibble__(&buffer[writed], byte & 0x0F);
return writed;
}
// # __FormatsAp_packBytes_calculateLen__
size_t __FormatsAp_packBytes_calculateLen__(size_t len) {
return len * 2;
}
// # __FormatsAp_packBytes__
size_t __FormatsAp_packBytes__(
char* buffer,
char* data,
size_t len
) {
size_t writed = 0;
for(size_t pos = 0; pos < len; pos++) {
writed += __FormatsAp_packByte__(&buffer[writed], data[pos]);
}
return writed;
}
// # __FormatsAp_writeToBuffer__
size_t __FormatsAp_writeToBuffer__(char buffer[], const char data[], size_t len) {
size_t writed = 0;
for(size_t pos = 0; pos < len; pos++) {
writed += __FormatsAp_packByte__(&buffer[writed], data[pos]);
}
return writed;
}
// parse
// # formats_AP_parseNibble
size_t formats_AP_parseNibble(char* buffer, char data) {
if (data >= 'A' && data <= 'P') {
*buffer = data - 'A';
} else if (data >= 'a' && data <= 'p') {
*buffer = data - 'a';
} else {
*buffer = 0;
}
return 1;
}
// # formats_AP_parseByteToBuffer
size_t formats_AP_parseByteToBuffer(char out_buffer[], const char* data) {
char buffer[2];
size_t writed = 0;
writed += formats_AP_parseNibble(&buffer[writed], data[0]);
writed += formats_AP_parseNibble(&buffer[writed], data[1]);
*out_buffer = (buffer[0] << 4) | buffer[1];
return 1;
}
// # formats_AP_parseToBuffer
size_t formats_AP_parseToBuffer(char buffer[], const char *ap, size_t ap_len) {
size_t writed = 0;
size_t readed = 0;
while(readed < ap_len) {
writed += formats_AP_parseByteToBuffer(&buffer[writed], &ap[readed]);
readed += 2;
}
return writed;
}
// # __u64FromTextDec__ atoi atou
uint64_t
__u64FromTextDec__(
const char *bytes, // expected bytes only with numbers from '0' to '9'
size_t len // expected > 0; expected <= __u64FromTextDec_maxLen__
) {
uint64_t result = 0;
|
<
>
|
>
|
|
>
|
|
|
|
|
|
<
|
|
<
<
<
<
<
|
|
>
|
<
|
|
|
>
<
|
>
>
|
>
>
|
|
>
|
<
|
|
|
|
|
|
|
<
<
|
|
|
|
>
|
|
<
|
|
<
|
|
|
>
>
|
|
>
|
>
|
>
|
|
|
>
>
>
>
>
>
>
>
>
>
>
>
|
>
|
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
|
) {
size_t hex_pos = data_len << 1;
for (size_t data_pos = 0; data_pos < data_len; data_pos++) {
hex_pos -= 2;
__Hex_fromByte__(&hex[hex_pos], data[data_pos]);
}
}
// AP
// its hex like but use from 'a' to 'p' values for symbols
// # __Ap_fromNibble__
uint8_t __Ap_fromNibble__(
char data
) {
if (data <= 16) {
return 'A' + data;
}
return 0;
}
// # __Ap_fromByte__
void __Ap_fromByte__(
char *buffer, // expected len >= 2
char byte
) {
buffer[0] = __Ap_fromNibble__((byte & 0xF0) >> 4);
buffer[1] = __Ap_fromNibble__(byte & 0x0F);
}
// # __Ap_fromBytes__
void __Ap_fromBytes__(
char *buffer, // expected len >= data_len << 1
const char *data,
size_t data_len
) {
size_t writed = 0;
for(size_t pos = 0; pos < data_len; pos++) {
__Ap_fromByte__(&buffer[writed], data[pos]);
writed += 2;
}
}
// # __Ap_fromBytesReversed__
void __Ap_fromBytesReversed__(
char *buffer, // expected len >= data_len << 1
const char *data,
size_t data_len
) {
size_t writed = data_len << 1;
for (size_t readed = 0; readed < data_len; readed++) {
writed -= 2;
__Ap_fromByte__(&buffer[writed], data[readed]);
}
}
// # __Nibble_fromAp__
uint8_t __Nibble_fromAp__(char data) {
if (data >= 'A' && data <= 'P') {
return data - 'A';
} else if (data >= 'a' && data <= 'p') {
return data - 'a';
}
return 0;
}
// # __Byte_fromAp__
uint8_t __Byte_fromAp__(
const char* data // expected len >= 2
) {
char fo = __Nibble_fromAp__(data[0]);
char of = __Nibble_fromAp__(data[1]);
return (fo << 4) | of;
}
// # __Bytes_fromAp__
void __Bytes_fromAp__(
char *buffer, // expected len >= ap_len >> 1
const char *ap,
size_t ap_len
) {
size_t readed = 0;
size_t writed = 0;
while(readed < ap_len) {
buffer[writed] = __Byte_fromAp__(&ap[readed]);
writed += 1;
readed += 2;
}
}
// # __Bytes_fromApReversed__
void __Bytes_fromApReversed__(
char *buffer, // expected len >= ap_len >> 1
const char *ap,
size_t ap_len // expected >= 2, expected odd
) {
size_t ap_pos = ap_len;
size_t writed = 0;
while (ap_pos > 0) {
ap_pos -= 2; // garanty ap_pos < ap_len
buffer[writed] = __Byte_fromAp__(&ap[ap_pos]);
writed += 1;
}
}
// # __u64FromTextDec__ atoi atou
uint64_t
__u64FromTextDec__(
const char *bytes, // expected bytes only with numbers from '0' to '9'
size_t len // expected > 0; expected <= __u64FromTextDec_maxLen__
) {
uint64_t result = 0;
|