Dans un article précédent, j’avais montré comment calculer un CRC32 avec Indy. Maintenant, dans celui-ci, je vais vous montrer comment effectuer le même travail avec Zlib et Boost qui sont aussi inclus avec C++Builder.
Tout d’abord, il faut ajouter les fichiers d’en-têtes:
#include <System.Zlib.hpp>
#include <boost/crc.hpp>
Pour la méthode qui utilise Zlib:
String __fastcall TForm1::GetCRC32Zlib(const String AFileName)
{
String Result;
System::Classes::TMemoryStream* LMemoryStream = NULL;
try
{
LMemoryStream = new System::Classes::TMemoryStream();
LMemoryStream->LoadFromFile(AFileName);
const unsigned __int64 LVal = System::Zlib::crc32(0,
static_cast<System::Byte*>(LMemoryStream->Memory),
LMemoryStream->Size);
Result = System::Sysutils::IntToHex(LVal, 8);
}
__finally
{
delete LMemoryStream;
}
return Result;
}
Pour la méthode qui utilise Boost:
String __fastcall TForm1::GetCRC32Boost(const String AFileName)
{
String Result;
System::Classes::TMemoryStream* LMemoryStream = NULL;
try
{
LMemoryStream = new System::Classes::TMemoryStream();
LMemoryStream->LoadFromFile(AFileName);
boost::crc_32_type crc_ccitt;
crc_ccitt.process_bytes(
static_cast<System::Byte*>(LMemoryStream->Memory),
LMemoryStream->Size);
const unsigned __int64 LVal = crc_ccitt.checksum();
Result = System::Sysutils::IntToHex(LVal, 8);
}
__finally
{
delete LMemoryStream;
}
return Result;
}
Voilà, vous avez maintenant le choix entre plusieurs méthodes pour la prochaine fois où vous aurez à utiliser un contrôle de redondance cyclique sur un fichier.