我有一个校验和,我需要将其添加到十六进制的ruby字符串中。我无法成功转换校验和。我对红宝石比较新,所以我不确定我是否遗漏了什么东西。这就是我在做的事情:
def get_checksum message
# get the checksum
cnt = 0
lrc = 0
while (cnt < message.length - 1)
lrc = lrc ^ message[cnt].to_i
cnt += 1
end
# return as hex
lrc.to_s.each_byte.map { |b| b.to_s(16) + " " }.join
end
我也有一些c#参考代码,但从来没有使用C#作为很长时间的mac C / C ++ / Obj-C编码器。这是我想要转换的C#代码:
// calculate LRC
private string GetChecksum(string inputstring)
{
int checksum = 0;
foreach (char c in inputstring)
{
checksum ^= Convert.ToByte(c);
}
return checksum.ToString("X2");
}
任何帮助都将不胜感激。
答案 0 :(得分:2)
.to_i
会在对角色进行调用时返回0
。
def get_checksum message
# get the checksum
lrc = 0
message.each_byte do |b|
lrc = lrc ^ b
end
# return as hex
lrc.to_s(16)
end