fork download
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include<stdint.h>
  5. typedef struct S_CHARMAP{
  6. unsigned char cp126;
  7. unsigned char utf8[3];
  8. }St_CharMap;
  9. int hex_to_ascii(const char *hex_str, uint8_t *output, size_t max_len) {
  10. size_t i = 0;
  11. while (i < max_len && *hex_str && *(hex_str + 1)) {
  12. if (sscanf(hex_str, "%2hhx", &output[i]) != 1)
  13. return -1; // خطا در پارس کردن
  14.  
  15. hex_str += 2;
  16. i++;
  17. }
  18. return i; // تعداد بایت‌های خوانده شده
  19. }
  20. int main() {
  21. St_CharMap charMap[]={
  22. {0x81,"پ"},
  23. {0x8D,"ج"},
  24. {0x8E,"ژ"},
  25. {0x90,"گ"},
  26. {0x98,"ک"},
  27. {0xAA,"ه"},
  28. {0xC0,"ه"},
  29. {0xC1,"ء"}, //shift M
  30. {0xC2,"آ"}, //shift H
  31. {0xC3,"أ"}, //shift N
  32. {0xC4,"ؤ"}, //shift V
  33. {0xC5,"إ"}, //shift B
  34. {0xC6,"ي"}, //shift X
  35. {0xC7,"ا"},
  36. {0xC8,"ب"},
  37. {0xC9,"ة"}, //shift Z
  38. {0xCA,"ت"},
  39. {0xCB,"ث"},
  40. {0xCC,"ج"},
  41. {0xCD,"ح"},
  42. {0xCE,"خ"},
  43. {0xCF,"د"},
  44. {0xD0,"ذ"},
  45. {0xD1,"ر"},
  46. {0xD2,"ز"},
  47. {0xD3,"س"},
  48. {0xD4,"ش"},
  49. {0xD5,"ص"},
  50. {0xD6,"ض"},
  51. {0xD7,"×"},
  52. {0xD8,"ط"},
  53. {0xD9,"ظ"},
  54. {0xDA,"ع"},
  55. {0xDB,"غ"},
  56. {0xDC,"-"},
  57. {0xDD,"ف"},
  58. {0xDE,"ق"},
  59. {0xDF,"ک"},
  60. {0xE1,"ل"},
  61. {0xE3,"م"},
  62. {0xE4,"ن"},
  63. {0xE5,"ه"},
  64. {0xE6,"و"},
  65. {0xEC,"ي"},
  66. {0xED,"ي"}
  67. };
  68. unsigned char hexMessage[]="D4C7D18E2035302C30303020D1EDC7E1";
  69. unsigned char *message = (unsigned char *)NULL;
  70. unsigned char message2[50]={0};
  71. int messageLen = 0;
  72. int charMapLen = sizeof(charMap)/sizeof(St_CharMap);
  73. int i =0;
  74. int j=0;
  75. char temp[2]={0};
  76. messageLen = strlen(hexMessage)/2;
  77. message = (unsigned char*)calloc(messageLen,sizeof(unsigned char));
  78. hex_to_ascii(hexMessage, message, messageLen);
  79.  
  80. for(j=0;j<messageLen;j++)
  81. {
  82. if(message[j]>0x80)
  83. {
  84. for(i=0;i<charMapLen;i++)
  85. {
  86. if(message[j]==charMap[i].cp126)
  87. {
  88. // printf("j=%d - i=%d",j,i);
  89. strcat(message2,charMap[i].utf8);
  90. break;
  91. }
  92.  
  93. }
  94. }else{
  95. sprintf(temp,"%c",message[j]);
  96. strcat(message2,temp);
  97. memset(temp,0,2);
  98. }
  99.  
  100. }
  101. printf("\n%s",message2);
  102. return 0;
  103. }
Success #stdin #stdout 0s 5292KB
stdin
Standard input is empty
stdout
شارژ 50,000 ريال