Concaténer des nombres binaires de différentes longueurs

J'ai donc 3 numéros. L'un est un char, et les deux autres sont int16_t (aussi connu comme shorts, mais d'après un tableau que j'ai trouvé shorts de ne pas être fiable 16 bits).

Je voudrais concaténer ensemble. Donc, dire que les valeurs d'entre eux ont été:

10010001

1111111111111101

1001011010110101

J'aimerais terminer avec une long long contenant:

1001000111111111111111011001011010110101000000000000000000000000

À l'aide de quelques solutions que j'ai trouvé en ligne, j'ai trouvé ceci:

long long result;
result = num1;
result = (result << 8) | num2;
result = (result << 24) | num3;

Mais ça ne fonctionne pas, il me donne très numéros impairs quand il est décodé.

Dans le cas où il y a un problème avec mon décodage de code, le voici: c'est

char num1 = num & 0xff;
int16_t num2 = num << 8 & 0xffff;
int16_t num3 = num << 24 & 0xffff;

Ce qui se passe ici? Je soupçonne que cela a à voir avec la taille d'une long long, mais je n'arrive pas à envelopper ma tête autour d'elle et je veux plus de place pour les numéros plus tard.

InformationsquelleAutor Cheezey | 2012-11-04