簡體   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