J'ai donc 3 nombres. L'un est un char
, et les deux autres sont int16_t
(également connu sous le nom short
s, mais selon un tableau, j'ai trouvé que les courts métrages ne seront pas fiables 16 bits).Concaténer des nombres binaires de différentes longueurs
J'aimerais les concaténer ensemble. Donc, dire que les valeurs d'entre eux étaient:
10010001
1111111111111101
1001011010110101
Je voudrais terminer avec un long long
contenant:
1001000111111111111111011001011010110101000000000000000000000000
aide quelques solutions que j'ai trouvées en ligne, je c ame up avec ceci:
long long result;
result = num1;
result = (result << 8) | num2;
result = (result << 24) | num3;
Mais cela ne fonctionne pas; cela me donne des chiffres très étranges quand il est décodé.
En cas il y a un problème avec mon code de décodage, la voici:
char num1 = num & 0xff;
int16_t num2 = num << 8 & 0xffff;
int16_t num3 = num << 24 & 0xffff;
Qu'est-ce qui se passe ici? Je soupçonne que cela a à voir avec la taille d'un long long
, mais je ne peux pas tout à fait enrouler ma tête autour et je veux de la place pour plus de numéros plus tard.
Je vais examiner cela, mais je pourrais penser à une approche différente (mettre les chiffres sur la droite au lieu de la gauche?) Parce que les nombres simples sont les plus rapides. – Cheezey
Il utilise 'long long', pas' long'. 'long long' peut stocker au moins 64 bits, il n'en a besoin que de 40. –