#include <stdio.h>
#include <string.h>
void MulBytesBy10(unsigned char* buf, size_t cnt)
{
unsigned carry = 0;
while (cnt--)
{
carry += 10 * *buf;
*buf++ = carry & 0xFF;
carry >>= 8;
}
}
void AddDigitToBytes(unsigned char* buf, size_t cnt, unsigned char digit)
{
unsigned carry = digit;
while (cnt-- && carry)
{
carry += *buf;
*buf++ = carry & 0xFF;
carry >>= 8;
}
}
void DecimalIntegerStringToBytes(unsigned char* buf, size_t cnt, const char* str)
{
while (*str != '\0')
{
MulBytesBy10(buf, cnt);
AddDigitToBytes(buf, cnt, *str++ - '0');
}
}
void PrintBytesHex(const unsigned char* buf, size_t cnt)
{
size_t i;
for (i = 0; i < cnt; i++)
printf("%02X", buf
[cnt
- 1 - i
]); }
int main(void)
{
unsigned char buf[16];
DecimalIntegerStringToBytes(buf, sizeof buf, "11234567890123456789112345678911");
PrintBytesHex
(buf
, sizeof buf
); puts("");
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCnZvaWQgTXVsQnl0ZXNCeTEwKHVuc2lnbmVkIGNoYXIqIGJ1Ziwgc2l6ZV90IGNudCkKewogIHVuc2lnbmVkIGNhcnJ5ID0gMDsKICB3aGlsZSAoY250LS0pCiAgewogICAgY2FycnkgKz0gMTAgKiAqYnVmOwogICAgKmJ1ZisrID0gY2FycnkgJiAweEZGOwogICAgY2FycnkgPj49IDg7CiAgfQp9Cgp2b2lkIEFkZERpZ2l0VG9CeXRlcyh1bnNpZ25lZCBjaGFyKiBidWYsIHNpemVfdCBjbnQsIHVuc2lnbmVkIGNoYXIgZGlnaXQpCnsKICB1bnNpZ25lZCBjYXJyeSA9IGRpZ2l0OwogIHdoaWxlIChjbnQtLSAmJiBjYXJyeSkKICB7CiAgICBjYXJyeSArPSAqYnVmOwogICAgKmJ1ZisrID0gY2FycnkgJiAweEZGOwogICAgY2FycnkgPj49IDg7CiAgfQp9Cgp2b2lkIERlY2ltYWxJbnRlZ2VyU3RyaW5nVG9CeXRlcyh1bnNpZ25lZCBjaGFyKiBidWYsIHNpemVfdCBjbnQsIGNvbnN0IGNoYXIqIHN0cikKewogIG1lbXNldChidWYsIDAsIGNudCk7CgogIHdoaWxlICgqc3RyICE9ICdcMCcpCiAgewogICAgTXVsQnl0ZXNCeTEwKGJ1ZiwgY250KTsKICAgIEFkZERpZ2l0VG9CeXRlcyhidWYsIGNudCwgKnN0cisrIC0gJzAnKTsKICB9Cn0KCnZvaWQgUHJpbnRCeXRlc0hleChjb25zdCB1bnNpZ25lZCBjaGFyKiBidWYsIHNpemVfdCBjbnQpCnsKICBzaXplX3QgaTsKICBmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspCiAgICBwcmludGYoIiUwMlgiLCBidWZbY250IC0gMSAtIGldKTsKfQoKaW50IG1haW4odm9pZCkKewogIHVuc2lnbmVkIGNoYXIgYnVmWzE2XTsKCiAgRGVjaW1hbEludGVnZXJTdHJpbmdUb0J5dGVzKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIjExMjM0NTY3ODkwMTIzNDU2Nzg5MTEyMzQ1Njc4OTExIik7CgogIFByaW50Qnl0ZXNIZXgoYnVmLCBzaXplb2YgYnVmKTsgcHV0cygiIik7CgogIHJldHVybiAwOwp9Cg==