Golang按位运算以及一般字节操作

Joh*_*ohn 5 byte bit-manipulation go

我有一些c#代码对一个字节执行一些按位操作.我试图在golang做同样的事情,但我遇到了困难.

c#中的示例

byte a, c;
byte[] data; 
int j;
c = data[j];
c = (byte)(c + j);
c ^= a;
c ^= 0xFF;
c += 0x48;
Run Code Online (Sandbox Code Playgroud)

我已经读过golang不能对字节类型执行按位操作.因此,我是否必须将我的代码修改为类型uint8才能执行这些操作?如果是这样,有一个干净,正确/标准的方式来实现这一点?

Ken*_*oom 12

Go当然可以对byte类型进行按位运算,这只是一个别名uint8.我必须对您的代码进行的唯一更改是:

  1. 变量声明的语法
  2. 在添加之前转换j为,因为Go在执行算术时缺少(按设计)整数提升转换.bytec
  3. 删除分号.

干得好

var a, c byte
var data []byte
var j int
c = data[j]
c = c + byte(j)
c ^= a
c ^= 0xFF
c += 0x48
Run Code Online (Sandbox Code Playgroud)

如果你打算按位而不是在Go中,请注意那个操作符^,而不是~大多数其他当代编程语言中使用的操作符.这与用于xor的运算符相同,但两者不是模糊的,因为编译器可以通过确定将^其用作一元运算符还是二元运算符来判断哪个是运算符.