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()); }
//////////////////////////////////////////////////////////////////////////////////////////// /// \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; }
//////////////////////////////////////////////////////////////////////////////////////////// /// \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; }
//////////////////////////////////////////////////////////////////////////////////////////// /// \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; }
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; }
void FileIO::put(CString data) { put(data.s, data.len() + 1); }