2014-06-08 12 views
5

Ho un codice C# che esegue alcune operazioni bit a bit su un byte. Sto cercando di fare lo stesso a Golang ma sto avendo delle difficoltà.Operazioni bitang Golang e manipolazione generale dei byte

Esempio in C#

byte a, c; 
byte[] data; 
int j; 
c = data[j]; 
c = (byte)(c + j); 
c ^= a; 
c ^= 0xFF; 
c += 0x48; 

Ho letto che golang non può eseguire operazioni bit per bit del tipo di byte. Quindi dovrò modificare il mio codice in un tipo uint8 per eseguire queste operazioni? Se è così esiste un modo pulito e corretto/standard per implementarlo?

risposta

11

Go certamente può eseguire operazioni bit a bit sul tipo byte, che è semplicemente un alias di uint8. Gli unici cambiamenti che ho dovuto fare per il codice sono stati:

  1. Sintassi delle dichiarazioni delle variabili
  2. Convert j-byte prima di aggiungerlo alla c, poiché Go manca (in base alla progettazione) le conversioni di promozione intero quando si fa l'aritmetica.
  3. Rimozione del punto e virgola.

Qui si va

var a, c byte 
var data []byte 
var j int 
c = data[j] 
c = c + byte(j) 
c ^= a 
c ^= 0xFF 
c += 0x48 

Se hai intenzione di fare bit-non in Go, si noti che l'operatore di ciò è ^, non il ~ che viene utilizzato nella maggior parte degli altri linguaggi di programmazione contemporanea . Questo è lo stesso operatore utilizzato per xor, ma i due non sono ambigui, dal momento che il compilatore è in grado di determinare quale sia il problema determinando se il ^ viene utilizzato come operatore unario o binario.

+0

Grazie. Avevo assunto perché non potevo eseguire operazioni bit a bit su un [] byte di lunghezza 1 che non era possibile e potevo farlo solo su unsigned uns. – John

+0

@john Nessuna operazione a bit su slice, anche se sono di lunghezza 1. Questo non è R o MATLAB dove uno scalare è uguale a un vettore di lunghezza 1. –

Problemi correlati