Java 库,用于在C/C++;和其他语言

Java 库,用于在C/C++;和其他语言,java,c++,c,language-agnostic,distributed,Java,C++,C,Language Agnostic,Distributed,我想知道是否有一个多语言库或其他东西可以给我以下结果: 我在Java中有一个String=“Abcde12345” 我们假设它的Java哈希代码是“78911” 我在C程序中有一个String=“Abcde12345” 我想知道的是:如何在我的C程序中轻松获得哈希代码78911? 既然每种语言都可以为字符串提供自己的哈希算法,我该如何处理呢 我是在使用分布式哈希表(数据网格、分布式缓存、NoSQL…)的背景下提出这个问题的。我计划为Java专有数据网格创建一个类似于C语言中一个非常简单的客

我想知道是否有一个多语言库或其他东西可以给我以下结果:

  • 我在Java中有一个String=“Abcde12345”
  • 我们假设它的Java哈希代码是“78911”
  • 我在C程序中有一个String=“Abcde12345”
我想知道的是:如何在我的C程序中轻松获得哈希代码78911? 既然每种语言都可以为字符串提供自己的哈希算法,我该如何处理呢


我是在使用分布式哈希表(数据网格、分布式缓存、NoSQL…)的背景下提出这个问题的。我计划为Java专有数据网格创建一个类似于C语言中一个非常简单的客户端的东西

这是我目前的用例,但对于我的项目,我需要一个与多种语言兼容的哈希算法: -Ruby中的Java哈希算法 -Java中的C#哈希算法 java中的C++散列算法 C++中的java哈希算法 -Erlang中的Java哈希算法 在任何情况下,两种语言中两种算法的哈希值都需要产生完全相同的哈希值

如果可能的话,我想将这个概念扩展到基本类型和“简单结构”,而不仅仅是字符串


有人知道处理我的用例的工具吗


编辑:适用于吉姆·鲍尔特

我的用例是:

我有一种专有的分区/数据网格技术,叫做GemFire,是用Java编写的。 它充当分布式哈希映射。 hashmap中的bucket数是固定的。 对于每个map键,它计算其hashcode,并应用一个模,以便它知道每个键所属的每个bucket

例如,如果我有113个bucket(这是gemfire中默认的bucket数),我的map key是字符串“key”

因此GemFire知道“钥匙”属于第69个桶

现在我有一个C应用程序:

  • 此应用程序已经知道Gemfire使用的桶数(113)
  • 该应用程序需要能够计算任意随机密钥的存储桶数,GemFire将该随机密钥放入其中
  • 这个应用程序需要能够快速计算,我们不能使用Web服务
  • 这个应用程序应该很容易部署,我不知道C/Java之间有什么桥接技术——这需要安装JVM来运行C应用程序

因此,如果您知道如何做到这一点,而不必在C中编写/使用Java哈希代码端口,请告诉我

编辑:避免混淆:我不想找其他任何东西,但Jim Balter您建议我不需要我声称需要的东西,所以如果您看到任何其他解决方案,请告诉我,除非像您所说的那样使用自定义或流行的哈希算法

将来,我可能需要对带有C#client应用程序的Erlang分区应用程序和其他语言执行同样的操作


编辑:我希望避免使用非java哈希算法(正如有人建议使用md5/sha1或任何更快的非安全性哈希算法)。这是因为我的解决方案旨在部署在用Java编写的传统分布式系统上,这些系统已经包含大量数据,而哈希算法的任何更改都需要大量的数据迁移过程。 然而,我要记住这个解决方案,因为它可能是人们从头开始一个新的分布式系统或准备进行数据迁移的第二个选择


所以最后,我要找的不是有人告诉我用C实现Java字符串哈希算法,我已经知道我可以做到了,谢谢!我想知道是否有人已经这么做了,不仅是为了用C语言实现所有的原始java算法,而且是为了用其他语言,以及其他语言!!!我正在寻找一个为其他语言提供的多语言库,一个散列算法端口。

因此,如果地球上只有3种语言(C、Java和Python),我的问题是:有没有提供以下功能的多语言库:

  • C语言中Java散列的一个端口
  • Python中Java哈希的一个端口
  • Java中C散列的一个端口
  • Python中C哈希的一个端口
  • Java中Python散列的一个端口
  • C语言中Python散列的一个端口
适用于所有可用的基本类型,最终适用于基本结构。 如果给定的语言没有“默认哈希算法”,那么使用最广泛的可以被认为是语言算法

你明白我的意思了吗?
我想知道是否有图书馆!我知道我可以查看JDK或规范并自己实现它,但由于我瞄准了大量的语言,我不知道如何用每种语言编写代码,我希望有人能为我做这件事,并在一个开源、免费使用的项目中提供

我想补充一点,您可以通过OpenJDK的源代码进行浏览,并查看hashCode实现。但是,请记住,正如Jim Garrison在评论中所建议的那样,不同的类可能会覆盖hashCode,因此您必须遵循实现。我建议使用众所周知的散列函数(如sha-1或md5)对字符串进行散列-您可以在Java、C/C++和其他编程语言中找到实现。

计算Java字符串散列代码的算法非常简单,并作为公共规范的一部分进行了记录:()

字符串对象的哈希代码计算为s[0]*31^(n-1)+ s[1]*31^(n-2)+…+s[n-1]

使用int算术,其中s[i]是字符串的第i个字符, n是字符串的长度,^表示求幂。(修订) 空字符串的哈希值为零。)

还要注意String是最后一个类,所以它的方法不能被重写;因此,可以保证给定的算法对于任何Java字符串都是正确的<
"Key".hashCode() % 113 = 69