Skip to content

Instantly share code, notes, and snippets.

@ssrlive
Last active February 10, 2018 14:30
Show Gist options
  • Save ssrlive/2c8c0e5f7ba924f0ebcacfdc322184f5 to your computer and use it in GitHub Desktop.
Save ssrlive/2c8c0e5f7ba924f0ebcacfdc322184f5 to your computer and use it in GitHub Desktop.
#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