繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM