Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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;
- }
Add Comment
Please, Sign In to add comment