16进制字符串转字节

我不是女神ヾ 2022-12-29 11:25 259阅读 0赞

16进制字符串转字节

  1. #include <stdlib.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4. void hex_str_to_byte(char *in, int len, unsigned char *out)
  5. {
  6. char *str = (char *)malloc(len);
  7. memset(str, 0, len);
  8. memcpy(str, in, len);
  9. for (int i = 0; i < len; i += 2)
  10. {
  11. //小写转大写
  12. if (str[i] >= 'a' && str[i] <= 'f')
  13. str[i] = str[i] - 0x20;
  14. if (str[i + 1] >= 'a' && str[i] <= 'f')
  15. str[i + 1] = str[i + 1] - 0x20;
  16. //处理第前4位
  17. if (str[i] >= 'A' && str[i] <= 'F')
  18. out[i / 2] = (str[i] - 'A' + 10) << 4;
  19. else
  20. out[i / 2] = (str[i] & ~0x30) << 4;
  21. //处理后4位, 并组合起来
  22. if (str[i + 1] >= 'A' && str[i + 1] <= 'F')
  23. out[i / 2] |= (str[i + 1] - 'A' + 10);
  24. else
  25. out[i / 2] |= (str[i + 1] & ~0x30);
  26. }
  27. free(str);
  28. }
  29. int main()
  30. {
  31. char *str = "FF32333435363738393a3b3c3d3e3f40";
  32. unsigned char temp[16] = { 0};
  33. hex_str_to_byte(str, strlen("ff32333435363738393a3b3c3d3e3f40"), temp);
  34. for (int i = 0; i < 16; i++)
  35. {
  36. printf("%02x ", temp[i]);
  37. }
  38. printf("\n");
  39. return 0;
  40. }

演示

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,259人围观)

还没有评论,来说两句吧...

相关阅读