#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
size_t len;
unsigned char* str;
} HexString;
int hex_to_int(unsigned char c)
{
int first =0;
int second =0;
int result=0;
if (c >= 97 && c <= 102) /* 97 = 'a'; 102 = 'f' */
c -= 32;
first = c / 16 - 3;
second = c % 16;
result = first * 10 + second;
if (result > 9) result--;
return result;
}
unsigned char hex_to_ascii(unsigned char c, unsigned char d)
{
unsigned char a = '0';
int high = hex_to_int(c) * 16;
int low = hex_to_int(d);
a = high + low;
return a;
}
HexString HextoString(const char* const st)
{
HexString result;
result.len = length/2+1;
result.
str = malloc(length
/2+1); size_t i;
size_t j = 0;
unsigned char buf = 0;
for (i = 0; i < length; i++)
{
if (i % 2 != 0)
{
result.str[j++] = hex_to_ascii(buf, st[i]);
}
else
{
buf = (unsigned char)st[i];
}
}
result.str[length/2+1] = '\0';
return result;
}
int main()
{
size_t i;
HexString hexString = HextoString("0a12345600a0020b12");
for (i = 0; i < hexString.len; ++i)
{
printf("<%02x> ", hexString.
str[i
]); }
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKdHlwZWRlZiBzdHJ1Y3QKewogICBzaXplX3QgICAgICAgICBsZW47CiAgIHVuc2lnbmVkIGNoYXIqIHN0cjsKfSBIZXhTdHJpbmc7CgppbnQgaGV4X3RvX2ludCh1bnNpZ25lZCBjaGFyIGMpCnsKICAgaW50IGZpcnN0ID0wOwogICBpbnQgc2Vjb25kID0wOwogICBpbnQgcmVzdWx0PTA7CiAgIGlmIChjID49IDk3ICYmIGMgPD0gMTAyKSAvKiA5NyA9ICdhJzsgMTAyID0gJ2YnICovCiAgICAgIGMgLT0gMzI7CiAgIGZpcnN0ICA9IGMgLyAxNiAtIDM7CiAgIHNlY29uZCA9IGMgJSAxNjsKICAgcmVzdWx0ID0gZmlyc3QgKiAxMCArIHNlY29uZDsKICAgaWYgKHJlc3VsdCA+IDkpIHJlc3VsdC0tOwogICByZXR1cm4gcmVzdWx0Owp9Cgp1bnNpZ25lZCBjaGFyIGhleF90b19hc2NpaSh1bnNpZ25lZCBjaGFyIGMsIHVuc2lnbmVkIGNoYXIgZCkKewogICB1bnNpZ25lZCBjaGFyIGEgPSAnMCc7CiAgIGludCBoaWdoID0gaGV4X3RvX2ludChjKSAqIDE2OwogICBpbnQgbG93ICA9IGhleF90b19pbnQoZCk7CiAgIGEgPSBoaWdoICsgbG93OwogICByZXR1cm4gYTsKfQoKSGV4U3RyaW5nIEhleHRvU3RyaW5nKGNvbnN0IGNoYXIqIGNvbnN0IHN0KQp7CiAgIEhleFN0cmluZyByZXN1bHQ7CiAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4oc3QpOwogICByZXN1bHQubGVuID0gbGVuZ3RoLzIrMTsKICAgcmVzdWx0LnN0ciA9IG1hbGxvYyhsZW5ndGgvMisxKTsKICAgc2l6ZV90IGk7CiAgIHNpemVfdCBqID0gMDsKICAgdW5zaWduZWQgY2hhciBidWYgPSAwOwogICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCiAgIHsKICAgICAgaWYgKGkgJSAyICE9IDApCiAgICAgIHsKICAgICAgICAgcmVzdWx0LnN0cltqKytdID0gaGV4X3RvX2FzY2lpKGJ1Ziwgc3RbaV0pOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgICBidWYgPSAodW5zaWduZWQgY2hhcilzdFtpXTsKICAgICAgfQogICB9CiAgIHJlc3VsdC5zdHJbbGVuZ3RoLzIrMV0gPSAnXDAnOwogICByZXR1cm4gcmVzdWx0Owp9CgppbnQgbWFpbigpCnsKICAgc2l6ZV90IGk7CiAgIEhleFN0cmluZyBoZXhTdHJpbmcgPSBIZXh0b1N0cmluZygiMGExMjM0NTYwMGEwMDIwYjEyIik7CiAgIGZvciAoaSA9IDA7IGkgPCBoZXhTdHJpbmcubGVuOyArK2kpCiAgIHsKICAgICAgcHJpbnRmKCI8JTAyeD4gIiwgaGV4U3RyaW5nLnN0cltpXSk7CiAgIH0KCiAgIGZyZWUoaGV4U3RyaW5nLnN0cik7CgogICByZXR1cm4gMDsKfQ==