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 算法,以使结果可靠地相同。您可以用 Java 和 C++ 实现自己的 CRC 算法,也可以用另一种语言实现一个 CRC 库的算法。

编辑:我只想强调你的需要相同。您的 C++ 字符串很可能与您的 Java 字符串具有不同的编码和/或字符大小。

于 2012-07-11T13:16:58.703 回答