diff options
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 18 |
1 files changed, 12 insertions, 6 deletions
@@ -16,21 +16,25 @@ void hex2bin(const char *data, int length, unsigned char *buf) length ^= 0x01; while(i < length) { + b = 0; + if(data[i] - '0' < 10) - b = data[i++] - '0'; + b = data[i] - '0'; else if(data[i] - 'a' < 7) - b = data[i++] - 'a' + 10; + b = data[i] - 'a' + 10; else if(data[i] - 'A' < 7) - b = data[i++] - 'A' + 10; + b = data[i] - 'A' + 10; + i++; b = (b << 4); if(data[i] - '0' < 10) - b |= data[i++] - '0'; + b |= data[i] - '0'; else if(data[i] - 'a' < 7) - b |= data[i++] - 'a' + 10; + b |= data[i] - 'a' + 10; else if(data[i] - 'A' < 7) - b |= data[i++] - 'A' + 10; + b |= data[i] - 'A' + 10; + i++; *p++ = b; } @@ -46,6 +50,8 @@ void bin2hex(const unsigned char *data, int length, char *buf) char *p = buf; for(i = 0; i < length; i++) { + b = 0; + b = (data[i] >> 4 & 0x0f); b += (b < 10) ? '0' : ('a' - 10); *p++ = b; |