#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<stdint.h>
typedef struct S_CHARMAP{
unsigned char cp126;
unsigned char utf8[3];
}St_CharMap;
int hex_to_ascii(const char *hex_str, uint8_t *output, size_t max_len) {
size_t i = 0;
while (i < max_len && *hex_str && *(hex_str + 1)) {
if (sscanf(hex_str
, "%2hhx", &output
[i
]) != 1) return -1; // خطا در پارس کردن
hex_str += 2;
i++;
}
return i; // تعداد بایتهای خوانده شده
}
int main() {
St_CharMap charMap[]={
{0x81,"پ"},
{0x8D,"ج"},
{0x8E,"ژ"},
{0x90,"گ"},
{0x98,"ک"},
{0xAA,"ه"},
{0xC0,"ه"},
{0xC1,"ء"}, //shift M
{0xC2,"آ"}, //shift H
{0xC3,"أ"}, //shift N
{0xC4,"ؤ"}, //shift V
{0xC5,"إ"}, //shift B
{0xC6,"ي"}, //shift X
{0xC7,"ا"},
{0xC8,"ب"},
{0xC9,"ة"}, //shift Z
{0xCA,"ت"},
{0xCB,"ث"},
{0xCC,"ج"},
{0xCD,"ح"},
{0xCE,"خ"},
{0xCF,"د"},
{0xD0,"ذ"},
{0xD1,"ر"},
{0xD2,"ز"},
{0xD3,"س"},
{0xD4,"ش"},
{0xD5,"ص"},
{0xD6,"ض"},
{0xD7,"×"},
{0xD8,"ط"},
{0xD9,"ظ"},
{0xDA,"ع"},
{0xDB,"غ"},
{0xDC,"-"},
{0xDD,"ف"},
{0xDE,"ق"},
{0xDF,"ک"},
{0xE1,"ل"},
{0xE3,"م"},
{0xE4,"ن"},
{0xE5,"ه"},
{0xE6,"و"},
{0xEC,"ي"},
{0xED,"ي"}
};
unsigned char hexMessage[]="D4C7D18E2035302C30303020D1EDC7E1";
unsigned char *message = (unsigned char *)NULL;
unsigned char message2[50]={0};
int messageLen = 0;
int charMapLen = sizeof(charMap)/sizeof(St_CharMap);
int i =0;
int j=0;
char temp[2]={0};
messageLen
= strlen(hexMessage
)/2; message
= (unsigned char*)calloc(messageLen
,sizeof(unsigned char)); hex_to_ascii(hexMessage, message, messageLen);
for(j=0;j<messageLen;j++)
{
if(message[j]>0x80)
{
for(i=0;i<charMapLen;i++)
{
if(message[j]==charMap[i].cp126)
{
// printf("j=%d - i=%d",j,i);
strcat(message2
,charMap
[i
].
utf8); break;
}
}
}else{
}
}
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RyaW5nLmg+CiNpbmNsdWRlPHN0ZGxpYi5oPgojaW5jbHVkZTxzdGRpbnQuaD4KdHlwZWRlZiBzdHJ1Y3QgU19DSEFSTUFQewogICAgdW5zaWduZWQgY2hhciBjcDEyNjsKICAgIHVuc2lnbmVkIGNoYXIgdXRmOFszXTsKfVN0X0NoYXJNYXA7CmludCBoZXhfdG9fYXNjaWkoY29uc3QgY2hhciAqaGV4X3N0ciwgdWludDhfdCAqb3V0cHV0LCBzaXplX3QgbWF4X2xlbikgewogICAgc2l6ZV90IGkgPSAwOwogICAgd2hpbGUgKGkgPCBtYXhfbGVuICYmICpoZXhfc3RyICYmICooaGV4X3N0ciArIDEpKSB7CiAgICAgICAgaWYgKHNzY2FuZihoZXhfc3RyLCAiJTJoaHgiLCAmb3V0cHV0W2ldKSAhPSAxKQogICAgICAgICAgICByZXR1cm4gLTE7IC8vINiu2LfYpyDYr9ixINm+2KfYsdizINqp2LHYr9mGCgogICAgICAgIGhleF9zdHIgKz0gMjsKICAgICAgICBpKys7CiAgICB9CiAgICByZXR1cm4gaTsgLy8g2KrYudiv2KfYryDYqNin24zYquKAjNmH2KfbjCDYrtmI2KfZhtiv2Ycg2LTYr9mHCn0KaW50IG1haW4oKSB7CiAgICBTdF9DaGFyTWFwIGNoYXJNYXBbXT17CiAgICAgICAgIHsweDgxLCLZviJ9LAogICAgICAgIHsweDhELCLYrCJ9LAogICAgICAgIHsweDhFLCLamCJ9LAogICAgICAgIHsweDkwLCLaryJ9LAoJCXsweDk4LCLaqSJ9LAogICAgICAgIHsweEFBLCLZhyJ9LAoJCXsweEMwLCLZhyJ9LAogICAgICAgIHsweEMxLCLYoSJ9LAkvL3NoaWZ0IE0KICAgICAgICB7MHhDMiwi2KIifSwgLy9zaGlmdCBICiAgICAgICAgezB4QzMsItijIn0sIC8vc2hpZnQgTgoJCXsweEM0LCLYpCJ9LCAvL3NoaWZ0IFYKICAgICAgICB7MHhDNSwi2KUifSwgLy9zaGlmdCBCCgkJezB4QzYsItmKIn0sIC8vc2hpZnQgWAoJCXsweEM3LCLYpyJ9LAogICAgICAgIHsweEM4LCLYqCJ9LAogICAgICAgIHsweEM5LCLYqSJ9LCAvL3NoaWZ0IFoKICAgICAgICB7MHhDQSwi2KoifSwKICAgICAgICB7MHhDQiwi2KsifSwKICAgICAgICB7MHhDQywi2KwifSwKICAgICAgICB7MHhDRCwi2K0ifSwKICAgICAgICB7MHhDRSwi2K4ifSwKCQl7MHhDRiwi2K8ifSwJCQogICAgICAgIHsweEQwLCLYsCJ9LAogICAgICAgIHsweEQxLCLYsSJ9LAogICAgICAgIHsweEQyLCLYsiJ9LAogICAgICAgIHsweEQzLCLYsyJ9LAogICAgICAgIHsweEQ0LCLYtCJ9LAogICAgICAgIHsweEQ1LCLYtSJ9LAogICAgICAgIHsweEQ2LCLYtiJ9LAogICAgICAgIHsweEQ3LCLDlyJ9LAogICAgICAgIHsweEQ4LCLYtyJ9LAogICAgICAgIHsweEQ5LCLYuCJ9LAogICAgICAgIHsweERBLCLYuSJ9LAogICAgICAgIHsweERCLCLYuiJ9LAogICAgICAgIHsweERDLCItIn0sCiAgICAgICAgezB4REQsItmBIn0sCiAgICAgICAgezB4REUsItmCIn0sCiAgICAgICAgezB4REYsItqpIn0sCQkKICAgICAgICB7MHhFMSwi2YQifSwKICAgICAgICB7MHhFMywi2YUifSwKICAgICAgICB7MHhFNCwi2YYifSwKICAgICAgICB7MHhFNSwi2YcifSwKICAgICAgICB7MHhFNiwi2YgifSwKICAgICAgICB7MHhFQywi2YoifSwKICAgICAgICB7MHhFRCwi2YoifQogICAgfTsKICAgIHVuc2lnbmVkIGNoYXIgaGV4TWVzc2FnZVtdPSJENEM3RDE4RTIwMzUzMDJDMzAzMDMwMjBEMUVEQzdFMSI7CiAgICB1bnNpZ25lZCBjaGFyICptZXNzYWdlID0gKHVuc2lnbmVkIGNoYXIgKilOVUxMOwogICAgdW5zaWduZWQgY2hhciBtZXNzYWdlMls1MF09ezB9OwoJaW50IG1lc3NhZ2VMZW4gPSAwOwoJaW50IGNoYXJNYXBMZW4gPSBzaXplb2YoY2hhck1hcCkvc2l6ZW9mKFN0X0NoYXJNYXApOwogICAgaW50IGkgPTA7CiAgICBpbnQgaj0wOwogICAgY2hhciB0ZW1wWzJdPXswfTsKICAgIG1lc3NhZ2VMZW4gPSBzdHJsZW4oaGV4TWVzc2FnZSkvMjsKICAgIG1lc3NhZ2UgPSAodW5zaWduZWQgY2hhciopY2FsbG9jKG1lc3NhZ2VMZW4sc2l6ZW9mKHVuc2lnbmVkIGNoYXIpKTsKICAgIGhleF90b19hc2NpaShoZXhNZXNzYWdlLCBtZXNzYWdlLCBtZXNzYWdlTGVuKTsKICAgIAogICAgZm9yKGo9MDtqPG1lc3NhZ2VMZW47aisrKQogICAgeyAgICAgCgkJIGlmKG1lc3NhZ2Vbal0+MHg4MCkKCQl7IAoJCSAgICBmb3IoaT0wO2k8Y2hhck1hcExlbjtpKyspCiAgICAgICAgICB7CgkJCQkgIGlmKG1lc3NhZ2Vbal09PWNoYXJNYXBbaV0uY3AxMjYpICAgICAgICAKCQkJCQl7CgkJCQkJLy8JcHJpbnRmKCJqPSVkIC0gaT0lZCIsaixpKTsKCQkJCQkJc3RyY2F0KG1lc3NhZ2UyLGNoYXJNYXBbaV0udXRmOCk7CgkJCQkJYnJlYWs7CgkJCQkJfSAKICAgICAgICAgICAgICAKICAgICAgICAgIH0KCQkJICB9ZWxzZXsKCQkJICAgICAgc3ByaW50Zih0ZW1wLCIlYyIsbWVzc2FnZVtqXSk7CgkJCQkgc3RyY2F0KG1lc3NhZ2UyLHRlbXApOwoJCQkJIG1lbXNldCh0ZW1wLDAsMik7CgkJCSAgfQoJCSAKICAgIH0KCXByaW50ZigiXG4lcyIsbWVzc2FnZTIpOwoJcmV0dXJuIDA7Cn0=