std::string URLEscape(std::string source) { char * src = (char *)source.c_str(); char * dst = (char *)calloc((source.length()*3)+2, 1); char *d; unsigned char *s; for (d=dst; *d; d++) ; for (s=(unsigned char *)src; *s; s++) { if ((*s>='0' && *s<='9') || (*s>='a' && *s<='z') || (*s>='A' && *s<='Z')) *(d++) = *s; else { *(d++) = '%'; *(d++) = hex[*s>>4]; *(d++) = hex[*s&15]; } } *d = 0; std::string finalString(dst); free(dst); return finalString; }
CString FileIO::getFixedString() { struct typ_prefixByte { unsigned int len : 7; unsigned int encoded : 1; }; unsigned long finalLen = 0; unsigned char result = getUByte(); typ_prefixByte prefix = *((typ_prefixByte*)(&result)); finalLen = finalLen | (unsigned long)prefix.len; int bitshift = 0; while (prefix.encoded) { bitshift += 7; result = getUByte(); prefix = *((typ_prefixByte*)(&result)); finalLen = finalLen | ((unsigned long)prefix.len) << bitshift; } char * string = getByteArray(finalLen); char * tmpString = new char [finalLen + 1]; memcpy(tmpString, string, finalLen); tmpString[finalLen] = '\0'; CString finalString(tmpString); delete [] tmpString; delete [] string; return finalString; }