2014-06-08 3 views
5

Ich habe einige C# -Code, der einige bitweise Operationen an einem Byte ausführt. Ich versuche das gleiche in Golang zu tun, habe aber Schwierigkeiten.Golan bitweise Operationen sowie allgemeine Byte-Manipulation

Beispiel in C#

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

Ich habe gelesen, dass golang nicht bitweise Operationen auf dem Byte-Typ durchführen kann. Muss ich daher meinen Code in einen Typ uint8 ändern, um diese Operationen auszuführen? Wenn ja, gibt es einen sauberen und korrekten Weg, dies zu implementieren?

Antwort

11

Go kann sicherlich bitweise Operationen auf dem byte Typ, der einfach ein Alias ​​von uint8 ist. Die einzigen Änderungen musste ich, um Ihren Code machen waren:

  1. Syntax der Variablendeklarationen
  2. Konvertieren j-byte, bevor es zu c hinzufügen, da Go fehlt (von Design) integer Förderung Conversions, wenn Arithmetik zu tun.
  3. Entfernen der Semikola.

Hier gehen Sie

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

Wenn Sie planen, bitweise nicht in Gehen Sie zu tun, beachten Sie, dass der Betreiber, dass ^, nicht die ~, die in den meisten anderen zeitgenössischen Programmiersprachen verwendet wird . Dies ist derselbe Operator, der für xor verwendet wird, aber die beiden sind nicht mehrdeutig, da der Compiler anhand der Bestimmung, ob der ^ als ein unärer oder binärer Operator verwendet wird, ermitteln kann, welcher der ist.

+0

Danke. Ich hatte angenommen, weil ich bitweise Operationen auf einem [] Byte der Länge 1 nicht durchführen konnte, und es konnte nur auf unsigned Ints tun. – John

+0

@john Keine bitweisen Operationen auf Slices, auch wenn sie die Länge 1 haben. Dies ist nicht R oder MATLAB, wo ein Skalar mit einem Vektor der Länge 1 übereinstimmt. –