Quindi ho 3 numeri. Uno è un char
e gli altri due sono int16_t
(noto anche come short
s, ma in base a una tabella che ho trovato i cortometraggi non saranno in modo affidabile 16 bit).Concatenare numeri binari di lunghezze diverse
Mi piacerebbe concatenarli insieme. Così dicono che i valori di loro sono stati:
10010001
1111111111111101
1001011010110101
mi piacerebbe finire con una long long
contenente:
1001000111111111111111011001011010110101000000000000000000000000
Utilizzando alcune soluzioni che ho trovato online, I c con questo:
long long result;
result = num1;
result = (result << 8) | num2;
result = (result << 24) | num3;
Ma non funziona; mi dà numeri molto strani quando è decodificato.
Nel caso in cui ci sia un problema con il mio codice di decodifica, eccolo:
char num1 = num & 0xff;
int16_t num2 = num << 8 & 0xffff;
int16_t num3 = num << 24 & 0xffff;
cosa sta succedendo qui? Sospetto che abbia a che fare con le dimensioni di un long long
, ma non riesco a pensarci bene e voglio spazio per altri numeri in seguito.
Vedrò quello, ma potrei pensare ad un approccio diverso (mettendo i numeri a destra invece di sinistra?) Perché i numeri semplici sono i più veloci. – Cheezey
Sta usando 'long long', non' long'. 'long long' può memorizzare almeno 64 bit, ne ha solo bisogno 40. –