我正在尝试将一个简单的哈希函数从 C 语言转换为 Go。
这些 C 和 Go 脚本之间有什么区别,我该如何修复 Go 代码?
C -> 结果为 {FB;01;4C|64:KDY;KMT;KYR;KT0;TKK;PAC;UD01;UD02;UD03;ID01;ID02;ID03;SYS|124A}
int sum;
char* pChar;
char s[8];
msg = "{FB;01;4C|64:KDY;KMT;KYR;KT0;TKK;PAC;UD01;UD02;UD03;ID01;ID02;ID03;SYS|"
sum = 0;
pChar = msg + 1; // sum starts after the opening {
while (*pChar != 0) {
sum += (int)*pChar++;
}
sprintf(s, "%04X}", sum);
strcat(msg, s);
Go -> 结果为 {FB;01;4C|64:KDY;KMT;KYR;KT0;TKK;PAC;UD01;UD02;UD03;ID01;ID02;ID03;SYS|004A}
msg := "{FB;01;4C|64:KDY;KMT;KYR;KT0;TKK;PAC;UD01;UD02;UD03;ID01;ID02;ID03;SYS|"
var sum uint8
for i := 1; i < len(msg); i++ {
sum += msg[i]
}
s := fmt.Sprintf("%04X}", sum)
req := strings.Join([]string{msg, s}, "")
fmt.Println(req)
最佳答案
您需要将“var sum”设为“uint16”,否则它永远不会超过 00FF。
关于将一个简单的哈希函数从 c 转换为 go,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51917943/