gpt4 book ai didi

Java CRC32 与 MySQL CRC32 不匹配

转载 作者:行者123 更新时间:2023-11-29 06:10:15 24 4
gpt4 key购买 nike

我需要 Java 的 CRC32 来匹配 MySQL 的 CRC32,但我得到了不同的结果。

MySQL

MariaDB> SELECT CRC32(148595460);
+------------------+
| CRC32(148595460) |
+------------------+
| 4137475682 |
+------------------+
1 row in set (0.00 sec)

Java

Checksum checksum = new CRC32();
checksum.update(ByteBuffer.allocate(4).putInt(148595460).array(), 0, 4);
System.out.println("Checksum: " + checksum.getValue());

结果:校验和:747753823

为什么会这样?我猜 MySQL 会将数字解释为字符串?

最佳答案

我相信您的观察可以通过仔细查看 MariaDB 和 Java 的 API 来解释:

MariaDB:

Computes a cyclic redundancy check value and returns a 32-bit unsigned value. The result is NULL if the argument is NULL. The argument is expected to be a string and (if possible) is treated as one if it is not.

换句话说,当您在 MariaDB 中调用 CRC32(148595460) 时,它使用的是字符串 148595460。现在让我们看看 Java。

Java:

来自 CRC32.update 的文档:

Updates the CRC-32 checksum with the specified array of bytes.

换句话说,您传入了 int 值 148595460,然后将其转换为字节数组。

如果你尝试下面的 Java 代码,我相信你会得到你想要的行为:

Checksum checksum = new CRC32();
byte[] b = "148595460".getBytes();
checksum.update(b);
system.out.println("Checksum: " + checksum.getValue());

关于Java CRC32 与 MySQL CRC32 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38671376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com