CRC CアルゴリズムをC#に移植する

リベイロ

Cにこの関数があり、C#に移植する必要があります。私はいくつかの試みをしましたが、私が間違っていることを理解することができません。

多項式は0x04C11DB7uLです。

whileループを含める必要はありません。また、Forループを試してみました。

static uint32_t APPL_CalcCRC32(uint32_t u32Sum, uint8_t *pData, uint32_t count)
{

    uint8_t iCounter;
    uint32_t u32Word;
    uint64_t u64Sum;

    u64Sum = u32Sum;

    count = count / 4;  // number of bytes --> number of words

    // algorithm according to AN4187 (Figure 2)
    while (count--)
    {
        u32Word = *((uint32_t*)pData)++;

        u64Sum ^= u32Word;

        for (iCounter = 0; iCounter < (8 * 4); ++iCounter)
        {
            u64Sum <<= 1;

            if (u64Sum & 0x100000000)
            {
                u64Sum ^= 0x04C11DB7uL;
            }
        }
    }

    return (uint32_t)u64Sum;
}

これは私の試みです:

private uint CalculateBlockCheckSum( uint u32Sum, byte[] blockImage )
        {
            uint u32Word;
            ulong u64Sum = u32Sum;
            ulong comparisonValue = 0x100000000;
            int count = blockImage.Length / 4;
            int i = 0;
            while ( count-- >= 0 )
            {

                u32Word = blockImage[i++];
                u64Sum ^= u32Word;

                for ( byte iCounter = 0; iCounter < ( 8 * 4 ); ++iCounter )
                {
                    u64Sum <<= 1;

                    if ( ( u64Sum & comparisonValue ) != 0 )
                    {
                        u64Sum ^= 0x04C11DB7uL;
                    }
                }
            }
            return (uint)u64Sum;
        }

私の主な疑問は、C#関数でのu32Wordの割り当てとループ基準ですが、正しいですか?

私のテストセットアップは58の配列(ブロック)で、各ブロックはそれぞれ1024バイトです。しかし、両方の関数の出力は同じではありません。それで、私の機能は間違っていますか、それとも何か他のものですか?

hiral2

データブロックの次の値に移動するときにのみ、行を変更する必要があります。

private uint CalculateBlockCheckSum(uint u32Sum, byte[] blockImage)
{
    uint u32Word;
    ulong u64Sum = u32Sum;
    ulong comparisonValue = 0x100000000;
    int count = blockImage.Length / sizeof(uint);
    int i = 0;
    while (count-- > 0)
    {
        u32Word = BitConverter.ToUInt32(blockImage,i*sizeof(uint));
        u64Sum ^= u32Word;

        for (byte iCounter = 0; iCounter < (8 * 4); ++iCounter)
        {
            u64Sum <<= 1;

            if ((u64Sum & comparisonValue) != 0)
            {
                u64Sum ^= 0x04C11DB7uL;
            }
        }
        i++;
    }
    return (uint)u64Sum;
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

CRC計算アルゴリズムをCからJavaに移植

分類Dev

CRCアルゴリズムをCからJavaに変換する

分類Dev

高速CRCアルゴリズム?

分類Dev

CRCアルゴリズムの実装

分類Dev

CRC16-CCITTアルゴリズムのC ++コードをPythonコードに変換するにはどうすればよいですか?

分類Dev

CRCアルゴリズムが誤検知になるように3つのエラーを作成します

分類Dev

JavaのDEFLATEアルゴリズムをC#に移植する

分類Dev

CRCチェックサム計算アルゴリズム

分類Dev

このCRC32アルゴリズムをPython3.3に変換します

分類Dev

CRC-10アルゴリズムの実装方法

分類Dev

CRC8アルゴリズムの説明

分類Dev

CRC 16、CからC#

分類Dev

CRC-16計算C#

分類Dev

EXT4CRC32Cチェックサムアルゴリズムが十分に文書化されていない

分類Dev

逆ビット順序の高速CRC32アルゴリズム

分類Dev

CRC16(ModBus)-コンピューティングアルゴリズム

分類Dev

Translating a CRC algorithm from C to Java

分類Dev

CRC関数をC ++からC#に変換します

分類Dev

CRC32C - メッセージへの 0/CRC の追加

分類Dev

C#のCRC4実装

分類Dev

CRC_82_Darc 関数の C#

分類Dev

C#からCRC-16を生成する方法

分類Dev

CRCを計算するCプログラム

分類Dev

プラットフォーム間でCRCルックアップテーブルを移植しますか?

分類Dev

ポリCRC-32K / 6.2のCRCルックアップテーブルを計算する

分類Dev

シリアルポートc#で受信したデータのCRC8を計算します

分類Dev

CRC(CRC32)ハッシュを再帰的に検証するコマンド

分類Dev

古い暗号化アルゴリズムをC#に移植しようとしています

分類Dev

VBAでCRC8を計算する

Related 関連記事

  1. 1

    CRC計算アルゴリズムをCからJavaに移植

  2. 2

    CRCアルゴリズムをCからJavaに変換する

  3. 3

    高速CRCアルゴリズム?

  4. 4

    CRCアルゴリズムの実装

  5. 5

    CRC16-CCITTアルゴリズムのC ++コードをPythonコードに変換するにはどうすればよいですか?

  6. 6

    CRCアルゴリズムが誤検知になるように3つのエラーを作成します

  7. 7

    JavaのDEFLATEアルゴリズムをC#に移植する

  8. 8

    CRCチェックサム計算アルゴリズム

  9. 9

    このCRC32アルゴリズムをPython3.3に変換します

  10. 10

    CRC-10アルゴリズムの実装方法

  11. 11

    CRC8アルゴリズムの説明

  12. 12

    CRC 16、CからC#

  13. 13

    CRC-16計算C#

  14. 14

    EXT4CRC32Cチェックサムアルゴリズムが十分に文書化されていない

  15. 15

    逆ビット順序の高速CRC32アルゴリズム

  16. 16

    CRC16(ModBus)-コンピューティングアルゴリズム

  17. 17

    Translating a CRC algorithm from C to Java

  18. 18

    CRC関数をC ++からC#に変換します

  19. 19

    CRC32C - メッセージへの 0/CRC の追加

  20. 20

    C#のCRC4実装

  21. 21

    CRC_82_Darc 関数の C#

  22. 22

    C#からCRC-16を生成する方法

  23. 23

    CRCを計算するCプログラム

  24. 24

    プラットフォーム間でCRCルックアップテーブルを移植しますか?

  25. 25

    ポリCRC-32K / 6.2のCRCルックアップテーブルを計算する

  26. 26

    シリアルポートc#で受信したデータのCRC8を計算します

  27. 27

    CRC(CRC32)ハッシュを再帰的に検証するコマンド

  28. 28

    古い暗号化アルゴリズムをC#に移植しようとしています

  29. 29

    VBAでCRC8を計算する

ホットタグ

アーカイブ