0

boost::crc_32_type を使用して C++ コードで文字列の crc コードを生成し、後で (java.util.zip.CRC32) を使用して Java で再生成したいのですが、結果は同じではありません。誰でも助けることができますか?

4

2 に答える 2

6

そう。結果は等しい。

import java.util.*;
import java.lang.*;

class Main
{
        public static void main (String[] args) throws java.lang.Exception
        {
                String s = new String("123456789");
                java.util.zip.CRC32 crc32 = new java.util.zip.CRC32();
                crc32.update(s.getBytes());
                System.out.println(crc32.getValue());
        }
}

3421780262

http://ideone.com/Q1GTB

#include <boost/crc.hpp>
#include <string>
#include <iostream>
#include <algorithm>

int main()
{
   const std::string str = "123456789";
   boost::crc_32_type crc32;
   crc32 = std::for_each(str.begin(), str.end(), crc32);
   std::cout << crc32() << std::endl;
}

3421780262

http://liveworkspace.org/code/0a5c4f1eaa920bd0161f7d37fa809aa3

于 2012-07-11T13:31:43.790 に答える
1

結果が確実に同じになるようにするには、同じビットで同じ CRC アルゴリズムを使用する必要があります。独自の CRC アルゴリズムを Java と C++ の両方で実装することも、1 つの CRC ライブラリのアルゴリズムを別の言語で実装することもできます。

編集:ビットが同じである必要があることを強調したいだけです。C++ 文字列のエンコーディングや文字サイズが Java 文字列と異なる可能性は十分にあります。

于 2012-07-11T13:16:58.703 に答える