BOOL hexstr2bin(const char *buf, BYTE *bindata, int maxlen, int *len) { for (*len=0; buf[0] && buf[1] && *len < maxlen; buf+=2, (*len)++) { u_char c1 = hexchar2char(buf[0]); u_char c2 = hexchar2char(buf[1]); if (c1 == 0xff || c2 == 0xff) break; bindata[*len] = (c1 << 4) | c2; } return TRUE; }
BOOL hexstr2bin_revendian(const char *buf, BYTE *bindata, int maxlen, int *len) { *len = 0; for (int buflen = (int)strlen(buf); buflen >= 2 && *len < maxlen; buflen-=2, (*len)++) { u_char c1 = hexchar2char(buf[buflen-1]); u_char c2 = hexchar2char(buf[buflen-2]); if (c1 == 0xff || c2 == 0xff) break; bindata[*len] = c1 | (c2 << 4); } return TRUE; }
size_t hexstr2bin(const char *buf, BYTE *bindata, size_t maxlen) { size_t len = 0; for ( ; buf[0] && buf[1] && len < maxlen; buf+=2, len++) { u_char c1 = hexchar2char(buf[0]); u_char c2 = hexchar2char(buf[1]); if (c1 == 0xff || c2 == 0xff) break; bindata[len] = (c1 << 4) | c2; } return len; }
size_t hexstr2bin_revendian_ex(const char *s, BYTE *bindata, size_t maxlen, int slen) { size_t len = 0; if (slen == -1) { slen = (int)strlen(s); } for ( ; slen >= 1 && len < maxlen; slen-=2, len++) { u_char c1 = hexchar2char(s[slen-1]); u_char c2 = (slen >= 2) ? hexchar2char(s[slen-2]) : 0; if (c1 == 0xff || c2 == 0xff) { return FALSE; } bindata[len] = c1 | (c2 << 4); } return len; }