我正在尝试用Go重写C代码,而我注意到的是,我尝试重写的代码遵循许多常见的模式。许多函数接受unsigned char
作为指针传递的数组,并且在调用函数或函数的其他部分时,我们会char
在进行算术运算时向指针添加一些值。这是一个简单的示例,仅用于演示目的。
static void func1(unsigned char *r) {
int i;
for (i = 0; i < CONSTANT; i++)
func2(r + i * OTHER_CONSTANT);
}
static void func2(const unsigned char *a) {
unsigned int i;
for (i = 0; i < CONSTANT; i += 8) {
// do some stuff
a += 3;
}
}
将此类内容转换为Go的正确方法是什么?我开始使用byte
切片来表示char
数组,但是我不知道如何char
在Go中将这些算术表达式准确地转换为带范围/索引的算术。我最终遇到了这样的事情:
func func1(r []byte) {
for i := 0; i < CONSTANT; i++ {
func2(r + i*OTHER_CONSTANT) // This just doesn't work
}
}
func func2(a []byte) {
for i := 0; i < CONSTANT; i += 8 {
// do some stuff
a += 3 // This doesn't work
}
}
知道如何将上述内容从C转换为Go吗?
您想要切片r
和a
,您可以通过以下方式进行切片:
func func1(r []byte) {
for i := 0; i < CONSTANT; i++ {
func2(r[i*OTHER_CONSTANT:])
}
}
func func2(a []byte) {
for i := 0; i < CONSTANT; i += 8 {
// do some stuff
a = a[3:]
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句