3

可能重复如何在 C++ 中以较小的字符串减少较大的字符串?可能是通过散列?

我试图为 java 中的 bmp 文件创建自己的校验和算法。因此,对于 54 字节(432 位)的标头,生成的校验和为 378 位长。

如何将其缩减为更小的数据集?关于如何实现我自己的哈希算法的任何建议?(条件之一是不使用现有算法)。

我使用了一个非常简单的哈希函数。

public static String hash_function(String bmpBytes) {

    String hash = "";
    int left_shift = Integer.parseInt(bmpBytes);
    int right_shift = Integer.parseInt(bmpBytes);
    left_shift = left_shift << 2;
    right_shift = right_shift >> 2;
    int xor = left_shift ^ right_shift;
    hash += Integer.toString(xor);
    return hash;
}

可能的答案:

我找到了一种通过在 where 生成 'n' 个随机二进制位 n < sizeOf(hash)然后执行hash % n-bits.

如果这是一个有效的答案,请告诉我,我会将问题标记为已回答。

4

1 回答 1

3

这是简单的事情。也许这可以激励你做一些更好的事情。

public static String encode(String header) {
    char[] code = new char[32];
    for(int i = 0; i < header.length(); i++) {
        code[i % code.length] = (char)((int)code[i % code.length] ^ (int)header.charAt(i));
    }
    return new String(code);
}
于 2013-08-01T18:21:06.250 回答