用输入字符串在c#中生成CRC32校验和



我正试图为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

Mark的帖子让我成功了一半。我找到的解决方案是转换为十六进制,然后将该十六进制转换为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);

最新更新