我有一些对字节执行按位运算的C#代码。我正在golang尝试做同样的事情,但是遇到了困难。
C#中的示例
byte a, c; byte[] data; int j; c = data[j]; c = (byte)(c + j); c ^= a; c ^= 0xFF; c += 0x48;
我读过golang无法对字节类型执行按位运算。因此,我是否必须将代码修改为uint8类型才能执行这些操作?如果是这样,是否有一种干净,正确/标准的方法来实现?
Go当然可以对byte类型进行按位运算,这只是的别名uint8。我必须对您的代码进行的唯一更改是:
byte
uint8
j
c
干得好
var a, c byte var data []byte var j int c = data[j] c = c + byte(j) c ^= a c ^= 0xFF c += 0x48
如果您打算在Go中按位执行操作,请注意,该操作符为,而^不是~大多数其他当代编程语言中使用的。这与用于xor的运算符相同,但两者并不矛盾,因为编译器可以通过确定将^用作一元运算符还是二进制运算符来分辨出哪一个。
^
~