![](/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.