Beispiel #1
0
void FileIO::putFixedString(CString data)
{
	// Ici c'est compliqué, mais c'est de la faute à CSharp, qui compresse la grosseur du string wtf lol
	// Faut faire l'inverse de sque jai trouvé plus haut
	struct typ_prefixByte
	{
		unsigned int len : 7;
		unsigned int encoded : 1;

		// Constructor
		typ_prefixByte()
		{
			len = 0;
			encoded = 0;
		}
	} prefix;

	// On pogne son len d'abords
	int len = data.len();

	// On pogne seuleument les 7 premier bit (127 en decimal ;))
	prefix.len = len & 0x7F;
	len = len >> 7;
	if (len > 0) prefix.encoded = 1;
	put(*((unsigned char*)(&prefix)));

	// Tant qu'on est plus grand que 0 on l'encode
	while (len > 0)
	{
		prefix.len = len & 0x7F;
		len = len >> 7;
		if (len > 0) prefix.encoded = 1;
		else prefix.encoded = 0;
		put(*((unsigned char*)(&prefix)));
	}

	// Finalement, on put le string
	put(data.s, data.len());
}
Beispiel #2
0
////////////////////////////////////////////////////////////////////////////////////////////
/// \brief Recherche de caract�es avec position de la string trouv�
///
///	Cette fonction utilise une cha�e de caract�e re�e en param�re et essaie de 
/// la trouver dans la cha�e (s). La position de la cha�e est aussi retourn�
/// (Seule la premi�e occurence de la cha�e est trouv�.)
///
/// \param	string : Cha�e de caract�e �trouver.
///	\param	index : Position de la cha�e si elle est trouv�.
///
/// \return True : si la cha�e est trouv�
///			False : si la cha�e n'est pas trouv�
///
///	\note Algorithmes plus performants existent si n�essaire.
////////////////////////////////////////////////////////////////////////////////////////////
bool CString::find(CString string, int & index)
{

	int len_1 = len();
	int len_2 = string.len();

	for (int i=0; i < (len_1 - len_2 + 1); i++)
	{
		if (strnicmp(&(s[i]), string.s, len_2) == 0)
		{
			index = i;
			return true;
		}
	}

	return false;
}
Beispiel #3
0
////////////////////////////////////////////////////////////////////////////////////////////
/// \brief Recherche de caract�es avec pointeur sur la string trouv�
///
///	Cette fonction utilise une cha�e de caract�e re�e en param�re et essaie de 
/// la trouver dans la cha�e (s). La fonction recoit aussi un pointeur en param�re qui
/// va pointer au d�ut de la cha�e trouv�. (Seule la premi�e occurence de la cha�e est trouv�)
///
/// \param	string : Cha�e de caract�e �trouver.
///	\param	strFound : Pointeur vers le b�ut de la cha�e si elle est trouv�
///
/// \return True : si la cha�e est trouv�
///			False : si la cha�e n'est pas trouv�
///
///	\note Algorithmes plus performants existent si n�essaire.
////////////////////////////////////////////////////////////////////////////////////////////
bool CString::find(CString string, char* strFound)
{

	int len_1 = len();
	int len_2 = string.len();

	for (int i=0; i < (len_1 - len_2 + 1) ;i++)
	{
		if (strnicmp(&(s[i]), string.s, len_2) == 0)
		{
			strFound = &(s[i]);
			return true;
		}
	}

	return false;
}
Beispiel #4
0
////////////////////////////////////////////////////////////////////////////////////////////
/// \brief Recherche de caract�es
///
///	Cette fonction utilise une cha�e de caract�e re�e en param�re et essaie de 
/// la trouver dans la cha�e (s). (Seule la premi�e occurence de la cha�e est trouv�)
///
/// \param string : Cha�e de caract�e �trouver.
///
/// \return True : si la cha�e est trouv�
///			False : si la cha�e n'est pas trouv�
///
///	\note Algorithmes plus performants existent si n�essaire.
////////////////////////////////////////////////////////////////////////////////////////////
bool CString::find(CString string)
{

	//longueur de notre cha�e (s)
	int len_1 = len();
	//longueur de la cha�e qu'on veut trouver
	int len_2 = string.len();

	//on parcours la cha�e pour essayer de trouver la sub-string
	for (int i=0; i < (len_1 - len_2 + 1); i++)
	{
		if (strnicmp(&(s[i]), string.s, len_2) == 0) 
		{
			return true;
		}
	}

	return false;
}
Beispiel #5
0
CString MD5(CString &in)
{
	CString ret;
    HCRYPTPROV hProv = 0;
    HCRYPTHASH hHash = 0;
	BYTE *rgbFile = (BYTE * ) (char *) in.data();
	DWORD cbRead = in.len();
    BYTE rgbHash[32];
    DWORD cbHash = 0;
    CHAR rgbDigits[] = "0123456789abcdef";
	if (!CryptAcquireContext(&hProv,
        NULL,
        NULL,
        PROV_RSA_FULL,
        CRYPT_VERIFYCONTEXT))
    {
		return "";
	}
	if (!CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash))
    {
        CryptReleaseContext(hProv, 0);
		return "";
    }
	if (!CryptHashData(hHash, rgbFile, cbRead, 0))
	{
		CryptReleaseContext(hProv, 0);
		CryptDestroyHash(hHash);
		return "";
	}
	cbHash = 32;
    if (CryptGetHashParam(hHash, HP_HASHVAL, rgbHash, &cbHash, 0))
	{
		for (DWORD i = 0; i < cbHash; i++)
        {
            ret += rgbDigits[rgbHash[i] >> 4];
			ret +=  rgbDigits[rgbHash[i] & 0xf];
        }
	}
	CryptDestroyHash(hHash);
    CryptReleaseContext(hProv, 0);
	return ret;
}
Beispiel #6
0
void FileIO::put(CString data)
{
	put(data.s, data.len() + 1);
}