一尘不染

Golang按位运算以及常规字节操作

go

我有一些对字节执行按位运算的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类型才能执行这些操作?如果是这样,是否有一种干净,正确/标准的方法来实现?


阅读 321

收藏
2020-07-02

共1个答案

一尘不染

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

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

干得好

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的运算符相同,但两者并不矛盾,因为编译器可以通过确定将^用作一元运算符还是二进制运算符来分辨出哪一个。

2020-07-02