我有一些 c# 代码可以对一个字节执行一些按位运算。我正尝试在 golang 中做同样的事情,但遇到了困难。
C# 示例
byte a, c;
byte[] data;
int j;
c = data[j];
c = (byte)(c + j);
c ^= a;
c ^= 0xFF;
c += 0x48;
我看过golang不能对byte类型进行按位运算。因此,我是否必须将我的代码修改为 uint8 类型才能执行这些操作?如果是这样,是否有一种干净、正确/标准的方法来实现它?
最佳答案
Go 当然可以对byte
类型进行按位运算,这只是uint8
的别名。我必须对您的代码进行的唯一更改是:
- 变量声明的语法
- 在将
j
添加到c
之前将j
转换为byte
,因为 Go 在进行算术运算时缺少(按设计)整数提升转换。< - 删除分号。
给你
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 的相同运算符,但两者并没有歧义,因为编译器可以通过确定 ^
是用作一元运算符还是二元运算符来判断哪个是哪个。
关于Golang 按位运算以及一般字节操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24105938/