J'ai le morceau de code suivant:Existe-t-il une meilleure option que reinterpret_cast <char*> lors de la lecture de std :: istream?
std::istream is;
// ... stream initialization ...
while(is)
{
uint32_t next4Bytes = 0;
is.read(reinterpret_cast<char*>(&next4Bytes), 4);
if(next4Bytes == 218893066)
{
is.seekg(-4, std::ios_base::cur);
break;
}
else
is.seekg(-3, std::ios_base::cur);
}
Y at-il d'autres mieux que reinterpret_cast<char*>
à lire 4 octets de std::istream
dans un uint32_t
? (évidemment autre que la fonte de style c)
Vous pouvez faire 'union fourBytes {uint32_t integer; char chars [4];} '(Je sais que c'est un comportement indéfini). Je ne sais pas si c'est "mieux" mais c'est différent, donc c'est ça. – PeterT
'char * readBuf; uint32_t next4Bytes; est.read (readBuf, 4); memcpy (& next4Bytes, readBuf, 4); 'ceci sans aucun typage – Balu
Dans mon opinion personnelle: Pensez à écrire votre propre fonction wrapper' toCharPtr' (ou similaire). La conversion en 'char *' est très courante, légale, ** et nécessaire ** dans le code IO, de sorte que je ne vois aucune raison d'encombrer mon code avec ces distributions de réinterprétation (que je traite comme un grand point d'exclamation dans la plupart des autres circonstances) – MikeMB