Last active
February 10, 2018 14:30
-
-
Save ssrlive/2c8c0e5f7ba924f0ebcacfdc322184f5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdbool.h> | |
unsigned int get_digit_value(char digit) { | |
int n = digit - '0'; | |
if (n >= 0 && n<10) { return (unsigned int) n; } | |
if ((digit == 'A') || (digit == 'a')) { return 10; } | |
if ((digit == 'B') || (digit == 'b')) { return 11; } | |
if ((digit == 'C') || (digit == 'c')) { return 12; } | |
if ((digit == 'D') || (digit == 'd')) { return 13; } | |
if ((digit == 'E') || (digit == 'e')) { return 14; } | |
if ((digit == 'F') || (digit == 'f')) { return 15; } | |
return -1; | |
} | |
int get_pair_value(char digit1, char digit2) { | |
unsigned int v1 = get_digit_value(digit1); | |
unsigned int v2 = get_digit_value(digit2); | |
return (v1 == -1 || v2 == -1) ? -1 : v1 * 16 + v2; | |
} | |
bool hex_str_to_binary(const char *src, size_t size, unsigned char *dst) { | |
bool isGood = false; | |
if (size % 2 == 0) { | |
isGood = true; | |
for (size_t i = 0; i<size; i += 2) { | |
int pv = get_pair_value(src[i], src[i + 1]); | |
if (pv == -1) { isGood = false; break; } | |
*dst = pv; | |
dst++; | |
} | |
} | |
// *dst = 0; | |
return isGood; | |
} | |
void binary_to_hex_str(const unsigned char *src, size_t size, char *dst) { | |
if (src == NULL || size == 0 || dst == NULL) { | |
return; | |
} | |
for (size_t i = 0; i != size; ++i) { | |
sprintf(dst, "%02X", src[i]); | |
dst += 2; | |
} | |
*dst = '\0'; | |
} | |
void str_to_upper(char *str) { | |
if (str == NULL) { | |
return; | |
} | |
for (int i = 0; str[i] != 0x00; i++) { | |
if (str[i] >= 'a' && str[i] <= 'z') { | |
str[i] -= 32; | |
} | |
} | |
} | |
int test(void) { | |
char buffer[100] = { 0 }; | |
char RecvData[64] = "474F4420426C65737320416D657269636121"; | |
printf("%s\n", RecvData); | |
printf("isGood = %d\n", hex_str_to_binary(RecvData, (size_t)strlen(RecvData), buffer)); | |
printf("%s\n", buffer); | |
char buffer2[100]; | |
binary_to_hex_str(buffer, strlen(buffer), buffer2); | |
printf("%s\n", buffer2); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment