![](/img/trans.png)
[英]Is there any difference in calculating CRC32 checksum in C# and Java?
[英]Generating CRC32 checksum in c# with input string
我正在尝试按照此处所述为 Kraken 交易所的订单生成 CRC32 校验和。 我在 SO 中找到了另一篇引用此 Github 文件的帖子,以生成 CRC32 校验和。 我遇到的问题是我需要根据输入string
生成校验和,其中我发现的所有校验和函数都以byte[]
作为输入。
我尝试将string
转换为byte[]
,但它没有给我按照 Kraken 文档应该得到的预期结果。
string inputString = "50055005010500501550050205005025500503050050355005040500504550050505005000500499550049905004980500497550049705004965500496050049555004950500";
Crc32 crc32 = new Crc32();
var byteArr = crc32.ComputeHash(Encoding.ASCII.GetBytes(inputString));
Console.WriteLine(Encoding.ASCII.GetString(byteArr));
此日志的值将是":??"
,因为我应该得到"974947235"
。
显然,我在这里一定做错了什么。 我错过了什么?
ComputeHash
返回byte[]
,因此您将获得四个字节。 您的974947235
变为十六进制3a, 1c, 83, a3
。 或者58, 28, 131, 163
十进制。 尝试将随机字节打印为字符只会导致焦虑和沮丧。 将它们打印为数字。 请注意,58 是冒号 (":") 字符,因此实际上您的第一个字符是正确的。
顺便说一下,有很多 CRC-32,但您似乎偶然发现了正确的一个,因为您提供的字符串确实导致CRC-32/ISO-HDLC : 974947235
。
马克的帖子让我成功了一半。 我找到的解决方案是转换为十六进制,然后将该十六进制转换为int
,如下所示:
Crc32 crc32 = new Crc32();
byte[] byteArr = crc32.ComputeHash(Encoding.ASCII.GetBytes(s));
string hex = BitConverter.ToString(byteArr);
int desiredInt = int.Parse(
hex.Replace("-", string.Empty),
System.Globalization.NumberStyles.HexNumber);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.