我正尝试为here中所述的Kraken交易所的订单生成CRC32校验和。我在SO中找到另一篇引用this Github file的帖子,以生成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"
。
很明显,我在这里一定做错了什么。我想念什么?
答案 0 :(得分:1)
ComputeHash
返回byte[]
,因此您将获得四个字节。您的974947235
变成3a, 1c, 83, a3
的十六进制。或十进制58, 28, 131, 163
。尝试将随机字节打印为字符只会导致焦虑和沮丧。将它们打印为数字。请注意,58是冒号(“:”)字符,因此实际上您的第一个字符是正确的。
顺便说一下,有很多CRC-32,但是您似乎偶然发现了正确的CRC-32,因为您提供的字符串确实导致了CRC-32/ISO-HDLC:974947235
。>
答案 1 :(得分:0)
Mark's post带我到了一半。我发现的解决方案是将其转换为十六进制,然后将其转换为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);