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

时间:2014-06-08 12:01:31

标签: go byte bit-manipulation

我有一些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才能执行这些操作?如果是这样,有一个干净,正确/标准的方法来实现这个?

1 个答案:

答案 0 :(得分:12)

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

  1. 变量声明的语法
  2. j转换为byte,然后再将其添加到c,因为Go在进行算术运算时缺乏(按设计)整数提升转换。
  3. 删除分号。
  4. 你去吧

    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的运算符相同,但两者不是模糊的,因为编译器可以通过确定^是用作一元运算符还是二元运算符来判断哪个是运算符。