Quindi sto leggendo un intero a 12 bit da un array di byte. Quel numero può essere negativo ma non riesco a capire come convertirlo in una variabile utilizzabile int16/int32 in C#. Ho la sensazione che avrò bisogno di fare qualcosa con lo spostamento di bit o altre operazioni bit a bit, ma mi sono battuto fino ad ora. Qualcuno può indicarmi la giusta direzione.Converti 12 bit int a 16 o 32 bit
var x = 0xFFF;
Questo deve essere stampato come -1 ma C# esegue naturalmente il cast di un int32 e viene stampato come 4095. Se è necessario eseguire il cast su int16 o int32, come mantenere il valore negativo.
Funziona alla grande, grazie mille! Spiega che cosa sta succedendo qui? so cosa sono >>> | fare ma non del tutto comprensibile. – Clarke76
Fondamentalmente spostando verso destra fino a quando rimane solo il bit del segno. Se è zero, restituiamo solo il valore originale. Se è 1 allora prendiamo -1 (0xFFFFFFFF), disattiviamo i 12 bit inferiori ('xor'), quindi' or' con il valore originale per attivare i bit in esso. In pratica, il risultato è semplicemente l'attivazione dei 20 bit superiori del valore a 32 bit. –
sì ... ho finito per scrivere tutto su carta e vedere esattamente cosa stava succedendo. Questo mi ha davvero aiutato. Ho capito che l'ultimo bit sarebbe stato usato come una bandiera negativa. Dopo che è stato facile da seguire. Grazie ancora. – Clarke76