Guest User

Untitled

a guest
Feb 22nd, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. #include <stdbool.h>
  2.  
  3. unsigned int get_digit_value(char digit) {
  4. int n = digit - '0';
  5. if (n >= 0 && n<10) { return (unsigned int) n; }
  6. if ((digit == 'A') || (digit == 'a')) { return 10; }
  7. if ((digit == 'B') || (digit == 'b')) { return 11; }
  8. if ((digit == 'C') || (digit == 'c')) { return 12; }
  9. if ((digit == 'D') || (digit == 'd')) { return 13; }
  10. if ((digit == 'E') || (digit == 'e')) { return 14; }
  11. if ((digit == 'F') || (digit == 'f')) { return 15; }
  12. return -1;
  13. }
  14.  
  15. int get_pair_value(char digit1, char digit2) {
  16. unsigned int v1 = get_digit_value(digit1);
  17. unsigned int v2 = get_digit_value(digit2);
  18. return (v1 == -1 || v2 == -1) ? -1 : v1 * 16 + v2;
  19. }
  20.  
  21. bool hex_str_to_binary(const char *src, size_t size, unsigned char *dst) {
  22. bool isGood = false;
  23. if (size % 2 == 0) {
  24. isGood = true;
  25. for (size_t i = 0; i<size; i += 2) {
  26. int pv = get_pair_value(src[i], src[i + 1]);
  27. if (pv == -1) { isGood = false; break; }
  28. *dst = pv;
  29. dst++;
  30. }
  31. }
  32. // *dst = 0;
  33. return isGood;
  34. }
  35.  
  36. void binary_to_hex_str(const unsigned char *src, size_t size, char *dst) {
  37. if (src == NULL || size == 0 || dst == NULL) {
  38. return;
  39. }
  40. for (size_t i = 0; i != size; ++i) {
  41. sprintf(dst, "%02X", src[i]);
  42. dst += 2;
  43. }
  44. *dst = '\0';
  45. }
  46.  
  47. void str_to_upper(char *str) {
  48. if (str == NULL) {
  49. return;
  50. }
  51. for (int i = 0; str[i] != 0x00; i++) {
  52. if (str[i] >= 'a' && str[i] <= 'z') {
  53. str[i] -= 32;
  54. }
  55. }
  56. }
  57.  
  58. int test(void) {
  59. char buffer[100] = { 0 };
  60. char RecvData[64] = "474F4420426C65737320416D657269636121";
  61.  
  62. printf("%s\n", RecvData);
  63. printf("isGood = %d\n", hex_str_to_binary(RecvData, (size_t)strlen(RecvData), buffer));
  64. printf("%s\n", buffer);
  65.  
  66. char buffer2[100];
  67. binary_to_hex_str(buffer, strlen(buffer), buffer2);
  68. printf("%s\n", buffer2);
  69.  
  70. return 0;
  71. }
Add Comment
Please, Sign In to add comment