Concatenar números binarios de diferentes longitudes
Así que tengo 3 números. Uno es unchar
, y los otros dos sonint16_t
(también conocido comoshort
s, pero de acuerdo con una tabla encontré que los cortos no serían confiables 16 bits).
Me gustaría concatenarlos juntos. Así que digamos que los valores de ellos fueron:
10010001
1111111111111101
1001011010110101
Me gustaría terminar con unalong long
conteniendo:
1001000111111111111111011001011010110101000000000000000000000000
Usando algunas soluciones que he encontrado en línea, se me ocurrió esto:
long long result;
result = num1;
result = (result << 8) | num2;
result = (result << 24) | num3;
Pero no funciona; me da números muy extraños cuando se decodifica.
En caso de que haya un problema con mi código de decodificación, aquí está:
char num1 = num & 0xff;
int16_t num2 = num << 8 & 0xffff;
int16_t num3 = num << 24 & 0xffff;
¿Que está pasando aqui? Sospecho que tiene que ver con el tamaño de unlong long
, pero no puedo rodearlo con la cabeza y quiero espacio para más números más adelante.