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

标签 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不能对byte类型进行按位运算。因此,我是否必须将我的代码修改为 uint8 类型才能执行这些操作?如果是这样,是否有一种干净、正确/标准的方法来实现它?

最佳答案

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

  1. 变量声明的语法
  2. 在将 j 添加到 c 之前将 j 转换为 byte,因为 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 的相同运算符,但两者并没有歧义,因为编译器可以通过确定 ^ 是用作一元运算符还是二元运算符来判断哪个是哪个。

关于Golang 按位运算以及一般字节操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24105938/

相关文章:

google-app-engine - Go App Engine 嵌套对象未存储在 Cloud Datastore 中

go - 无法安装 ipfs

json.Unmarshal 接口(interface)指针与稍后的类型断言

php - PHP将整数转换为32位(4字节)十六进制以进行套接字编程

python - Base64解码

go - Go 如何将 3 字节序列转换为适当的 Unicode 字符?

c++ - 在 std::uint8_t 中移位

assembly - 除以奇数的算术移位 - 微程序控制

arrays - 有没有更好的方法来处理可变大小的 slice ?

32位和64位JVM之间的Java BitShift差异