Beispiel #1
0
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;
}
Beispiel #2
0
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;
}