size_t urlstr2bin(const char *str, BYTE *bindata, size_t maxsize) { int len = (int)strlen(str); char *b64 = new char [len + 4]; strcpy(b64, str); for (char *s=b64; *s; s++) { switch (*s) { case '-': *s = '+'; break; case '_': *s = '/'; break; } } if (b64[len-1] != '\n' && (len % 4) && b64[len-1] != '=') { sprintf(b64 + len, "%.*s", int(4 - (len % 4)), "==="); } size_t size = b64str2bin(b64, bindata, maxsize); delete [] b64; return size; }
BOOL urlstr2bin(const char *str, BYTE *bindata, int maxlen, int *len) { ssize_t size = strlen(str); char *b64 = new char [size + 4]; strcpy(b64, str); for (char *s=b64; *s; s++) { switch (*s) { case '-': *s = '+'; break; case '_': *s = '/'; break; } } if (b64[size-1] != '\n' && (size % 4) && b64[size-1] != '=') { sprintf(b64 + size -1, "%.*s", 4 - (size % 4), "==="); } b64str2bin(b64, bindata, maxlen, len); free(b64); return TRUE; }
size_t b64str2bin_revendian(const char *s, BYTE *bindata, size_t maxsize) { size_t size = b64str2bin(s, bindata, maxsize); rev_order(bindata, size); return size; }
BOOL b64str2bin_revendian(const char *buf, BYTE *bindata, int maxlen, int *len) { if (!b64str2bin(buf, bindata, maxlen, len)) return FALSE; rev_order(bindata, *len); return TRUE; }