Sto provando a convertire i decimali (0,05, -0,28, 25,00, ecc.) in un numero firmato a complemento a 17 bit 2. I dati dei parametri che sto trasmettendo sono SysEX Midi Data (per alcuni sintetizzatori esterni). I parametri dei dati sono composti da 3 byte.
Ad esempio, l'esempio fornito è il seguente:
- I dati dei parametri per impostare il valore su -0.02 è (07 7F 70) (Dati2, Dati1, Dati0)
Mi chiedevo se qualcuno potesse darmi una guida per farlo in Java, ecco le specifiche di cui sto andando:
- I dati dei parametri sono numeri firmati del complemento numero 17 a 2 bit
-
data2 = Numero del canale di missaggio e bit più significativi (bit 14-16) dei dati del parametro (con il formato 0xxx xyyy, dove xxxx è il canale di mix numero (0-15) e yyy sono i bit più in alto (bit 14-16) dei dati dei parametri.)
-
data1 = Bit 7-13 dei dati del parametro
- data0 = I bit meno significativi (bit 0-6) dei dati del parametro
Quindi, ecco cosa sono in grado di dedurre finora:
- I 3 byte sono composti da 17 bit, + i 4 bit per l'invio di # 0-15 (The Mix Channel)
- Il 17 bit è il bit di firma?
- Il bit di firma deve essere impostato solo se è un numero negativo, e in questo caso deve essere formattato con il complemento a 2
- Il bit più alto per ogni byte di dati dei parametri è impostato su 0
Tenendo presente tutto questo, qualcuno può aiutarmi a capire, pubblicare o aiutarmi a scrivere una funzione per formattare questo numero a 17 bit da un valore decimale con segno? Aggiunta / sottrazione di bit binari in Java, Complementi di due, ecc ... Sarebbe molto gradito che qualcuno abbia qualche funzione di esempio, o spiegazioni!
Saluti