将一个简单的哈希函数从 c 转换为 go

标签 c go hash

我正在尝试将一个简单的哈希函数从 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/

相关文章:

c - 结构体保存到 bin 文件后如何删除其内容?

C程序中的命令行参数?

go - 如何初始化嵌套的复杂结构

php - 良好的数字哈希

c - gettimeofday 和clock_gettime 哪个更快?

c - 使用宏进行函数声明和定义对静态库中符号导出的影响

go - 无法在 Fedora 31 中安装 gopls

arrays - 即使在 slice 和变异之后,为什么/如何保留其初始化值?

java - 从字符串和整数创建散列

java - 哈希(带有 Spring)和盐 : is this safe?