我試圖在Go中重寫C代碼,並且我注意到我嘗試重寫的代碼遵循很多常見模式。許多函數接受unsigned char
數組,作爲指針傳遞,無論是在調用函數還是在函數的某些其他部分,我們都會爲指針添加一些值,如同算術一樣。這是一個簡單的示例,僅用於演示目的。將C數組和指針代碼轉換爲Go
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?
你有數組的指針,而不是在使用索引。你得到的是對索引訪問的邊界檢查。這使得您的Go程序比C代碼更安全,但速度也更慢。您也可以使用切片,這可以使您的代碼更具可讀性。 – chmike