J'ai besoin de convertir l'heure d'un format à un autre en C++ et elle doit être compatible avec plusieurs plates-formes. J'ai créé une structure comme mon conteneur de temps. Les champs de structure doivent également être unsigned int
comme spécifié par le code existant.C++ Problème de débordement d'entier lors de la conversion d'un entier double en un entier non signé
struct time{
unsigned int timeInteger;
unsigned int timeFraction;
} time1, time2;
Mathématiquement la conversion est la suivante:
time2.timeInteger = time1.timeInteger + 2208988800
time2.timeFraction = (time1.timeFraction * 20E-6) * 2e32
Voici mon code original en C++ mais quand j'essaye d'écrire dans un fichier binaire, le temps converti ne correspond pas aux données de vérité. Je pense que ce problème est dû à une erreur de type de casting? Ce code sera compilé dans VS2008 et sera exécuté.
void convertTime(){
time2.timeInteger = unsigned int(time1.timeInteger + 2209032000);
time2.timeFraction = unsigned int(double(time1.timeFraction) * double(20e-6)*double(pow(double(2),32)));
}
@ shuttle87: "better" est ouvert à l'interprétation, mais dans ce cas, se traduit par "will not compile", ce que peu de gens trouvent une amélioration en soi. –
@ shuttle87: 'reinterpret_cast' ne fonctionnera pas pour la conversion de types numériques; vous avez besoin de 'static_cast' pour cela. Et ce n'est pas en utilisant la conversion en style C, c'est en utilisant la conversion de style d'initialisation C++. Personnellement, je trouve cela plus facile à regarder que static_cast pour les conversions numériques. –
Bien que je crois 'non signé int (value)' est invalide pour des raisons techniques, mais accepté par la plupart des compilateurs. –