3

重複の可能性C ++でより小さな文字列でより大きな文字列を減らす方法は? おそらくハッシュによって?

Java で bmp ファイル用の独自のチェックサム アルゴリズムを作成しようとしました。したがって、54 バイト (432 ビット) のヘッダーの場合、結果のチェックサムは 378 ビット長になります。

それをより小さなデータセットに減らすにはどうすればよいですか? 独自のハッシュ アルゴリズムを実装する方法について何か提案はありますか? (条件の 1 つは、既存のアルゴリズムを使用しないことでした)。

非常に単純なハッシュ関数を使用しました。

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;
}

可能な答え:

「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 に答える