Je veux mettre une valeur de 32 bits dans un entier non signé. Je veux que ce programme fonctionne sur des platfroms avec des int de 32 et 64 bits aussi bien qu'avec des petits et grands endians. Voici mon code32 bits dans la conversion unit64 en C++
void uCHarToInt(unsigned char* input, unsigned int* oputput)
{
memcpy(oputput, reinterpret_cast<unsigned int*>(&input), 4);
if (sizeof(unsigned int) == 8)
{
*oputput >>= 32;
}
}
Je pense que cela va travailler avec le grand endnian et avec 32 et 64 types entiers de bits, mais je ne suis pas sûr de la façon dont peu endian et memcpy ne se comporte sur différentes plates-formes. N'y a-t-il pas une meilleure solution?
Pourquoi pensez-vous vous avez besoin de réinterpréter cast ici? Pourquoi n'utilisez-vous pas simplement 'uint32_t', dont la taille exacte est garantie? –
J'ai réutilisé de l'ancien code et de l'ID me donner des conseils pour utiliser cette distribution .. et j'ai des fonctions, ça retourne des entiers non signés, mais il semble préférable de les changer ... donc ça marchera sur toutes les plateformes oui? void uCHarToInt (entrée char * non signée, uint32_t * oputput) { \t memcpy (oputput, entrée, 4); } –
Oubliez le code. Décrivez ce que vous voulez réaliser, sans mentionner comment vous tentez de l'atteindre. Parce que, évidemment, le code est bizarre, c'est le moins qu'on puisse dire. – gnasher729