#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#define str_size 32/4
#define bin_size 32/8
void htob(char hex[], unsigned char bin[]);
/*That HEX is type of string converts to binary.*/
int main(void)
{
char string[str_size+2] = "" ; //if string include 0x(0X) that array need +2
unsigned char bin[bin_size] = "";
htob(string, bin);
for (int i = bin_size-1; i >= 0; --i)
{
}
return 0;
}//這裡跳出 Run-Time Check Failure #2 - Stack around the variable 'string' was corrupted.
void htob(char hex[], unsigned char bin[])
{
enum HAVE {NO,YES=2};
enum HAVE have_0x=NO;//or 0X
int b = bin_size - 1;
int h = 0;
int odd=0;//輸入基數個hex字元數
int unfilled,temp, twice;
unsigned char integer;
if (hex[h] == '0' && (hex[h + 1] == 'x' || hex[h + 1] == 'X'))//Whether have the input 0X/0x?
have_0x = YES;
unfilled
= str_size
- (strlen(hex
) - have_0x
);
if (unfilled)
{
for (temp = 1; temp <= (unfilled / 2); ++temp,--b)//輸入未滿填則0
{
bin[b] = 0x00;
}
if (unfilled % 2)
{
odd = 1;
}
}
for (h
=have_0x
; b
>=0 && h
<(int)strlen(hex
) ; --b
) {
integer = 0x00;
for (twice = 0; twice < 2;++twice)
{
if (hex[h] >= '0'&&hex[h] <= '9')
{
integer = integer * 16 + (hex[h] - '0');
++h;
}
else if (hex[h] >= 'a'&&hex[h] <= 'f')
{
integer = integer * 16 + (hex[h] - 'a'+10);
++h;
}
else if (hex[h] >= 'A'&&hex[h] <= 'F')
{
integer = integer * 16 + (hex[h] - 'A'+10);
++h;
}
else
{
++h;
}
if (odd)
break;
}
bin[b] = integer;
odd = 0;
}
}
I2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyAgCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNkZWZpbmUgc3RyX3NpemUgMzIvNAojZGVmaW5lIGJpbl9zaXplIDMyLzgKCnZvaWQgaHRvYihjaGFyIGhleFtdLCB1bnNpZ25lZCBjaGFyIGJpbltdKTsKCi8qVGhhdCBIRVggaXMgdHlwZSBvZiBzdHJpbmcgY29udmVydHMgdG8gYmluYXJ5LiovCmludCBtYWluKHZvaWQpCnsKCWNoYXIgc3RyaW5nW3N0cl9zaXplKzJdID0gIiIgOyAvL2lmIHN0cmluZyBpbmNsdWRlIDB4KDBYKSB0aGF0IGFycmF5IG5lZWQgKzIKCXVuc2lnbmVkIGNoYXIgYmluW2Jpbl9zaXplXSA9ICIiOwoKCXByaW50Zigi6KuL6Ly45YWl5qyy6L2J5o+b5LmL5a2X5LiyOiIpOwoJc2NhbmYoIiVzIiwgc3RyaW5nKTsKCglodG9iKHN0cmluZywgYmluKTsKCglwcmludGYoIk1TQiAgIik7Cglmb3IgKGludCBpID0gYmluX3NpemUtMTsgaSA+PSAwOyAtLWkpCgl7CgkJcHJpbnRmKCIlWCAgIiwgYmluW2ldKTsKCX0KCXByaW50ZigiTFNCXG4iKTsKCglzeXN0ZW0oInBhdXNlIik7CglyZXR1cm4gMDsKfS8v6YCZ6KOh6Lez5Ye6IFJ1bi1UaW1lIENoZWNrIEZhaWx1cmUgIzIgLSBTdGFjayBhcm91bmQgdGhlIHZhcmlhYmxlICdzdHJpbmcnIHdhcyBjb3JydXB0ZWQuCgp2b2lkIGh0b2IoY2hhciBoZXhbXSwgdW5zaWduZWQgY2hhciBiaW5bXSkKewoJZW51bSBIQVZFIHtOTyxZRVM9Mn07CgllbnVtIEhBVkUgaGF2ZV8weD1OTzsvL29yIDBYCgoJaW50IGIgPSBiaW5fc2l6ZSAtIDE7CglpbnQgaCA9IDA7CglpbnQgb2RkPTA7Ly/ovLjlhaXln7rmlbjlgItoZXjlrZflhYPmlbgKCWludAl1bmZpbGxlZCx0ZW1wLCB0d2ljZTsKCXVuc2lnbmVkIGNoYXIgaW50ZWdlcjsKCglpZiAoaGV4W2hdID09ICcwJyAmJiAoaGV4W2ggKyAxXSA9PSAneCcgfHwgaGV4W2ggKyAxXSA9PSAnWCcpKS8vV2hldGhlciBoYXZlIHRoZSBpbnB1dCAwWC8weD8KCQloYXZlXzB4ID0gWUVTOwoKCXVuZmlsbGVkID0gc3RyX3NpemUgLSAoc3RybGVuKGhleCkgLSBoYXZlXzB4KTsKCglpZiAodW5maWxsZWQpCgl7CgkJZm9yICh0ZW1wID0gMTsgdGVtcCA8PSAodW5maWxsZWQgLyAyKTsgKyt0ZW1wLC0tYikvL+i8uOWFpeacqua7v+Whq+WJhzAKCQl7CgkJCWJpbltiXSA9IDB4MDA7CgkJfQoJCWlmICh1bmZpbGxlZCAlIDIpCgkJewoJCQlvZGQgPSAxOwoJCX0KCX0KCQoJZm9yIChoPWhhdmVfMHggOyBiPj0wICYmIGg8KGludClzdHJsZW4oaGV4KSA7IC0tYiApCgl7CgkJaW50ZWdlciA9IDB4MDA7CgkJZm9yICh0d2ljZSA9IDA7IHR3aWNlIDwgMjsrK3R3aWNlKQoJCXsKCQkJaWYgKGhleFtoXSA+PSAnMCcmJmhleFtoXSA8PSAnOScpCgkJCXsKCQkJCWludGVnZXIgPSBpbnRlZ2VyICogMTYgKyAoaGV4W2hdIC0gJzAnKTsKCQkJCSsraDsKCQkJfQoJCQllbHNlIGlmIChoZXhbaF0gPj0gJ2EnJiZoZXhbaF0gPD0gJ2YnKQoJCQl7CgkJCQlpbnRlZ2VyID0gaW50ZWdlciAqIDE2ICsgKGhleFtoXSAtICdhJysxMCk7CgkJCQkrK2g7CgkJCX0KCQkJZWxzZSBpZiAoaGV4W2hdID49ICdBJyYmaGV4W2hdIDw9ICdGJykKCQkJewoJCQkJaW50ZWdlciA9IGludGVnZXIgKiAxNiArIChoZXhbaF0gLSAnQScrMTApOwoJCQkJKytoOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJcHJpbnRmKCLovLjlhaXpnZ7ms5VoZXjlrZflhYNcbiIpOwoJCQkJKytoOwoJCQl9CgkJCWlmIChvZGQpCgkJCQlicmVhazsKCQl9CgkJYmluW2JdID0gaW50ZWdlcjsKCQlvZGQgPSAwOwoJfQp9Cgk=