このC++チェックサムをJavaに変換しようとしていますが、当面は失敗しました。私は何が間違っているのですか?
それは何をすることになっていますか?OpenGLのバッファに対して正のチェックサムを返すことになっています
これがCの部分です。
DWORD QuickChecksum(DWORD *data, int size){
if(!data) {
return 0x0;
}
DWORD sum;
DWORD tmp;
sum = *data;
for(int i = 1; i < (size/4); i++)
{
tmp = data[i];
tmp = (DWORD)(sum >> 29) + tmp;
tmp = (DWORD)(sum >> 17) + tmp;
sum = (DWORD)(sum << 3) ^ tmp;
}
return sum;
}
そして、これが私がJavaで試したことです。私の知る限り、DWORDは32ビットなので、長い間intを使用してunsigned intを取得します。これは、Javaで>>>を使用して実行する必要がありますか?
私はこの問題をずっと見てきたので、私はそれを知らなくなってきました。
public static long getChecksum(byte[] data, int size) {
long sum, tmp;
sum = getInt(new byte[]{data[0], data[1], data[2], data[3]},true) & 0xFF;
for(int I = 4; I < data.length; I += 4)
{
tmp = getInt(new byte[]{data[I],data[I+1],data[I+2],data[I+3]},true) & 0xFF;
tmp = (sum >>> 29) + tmp;
tmp = (sum >>> 17) + tmp;
sum = (sum << 3) ^ tmp;
}
return sum & 0xFF;
}
private static int getInt(byte[] bytes, boolean big) {
ByteBuffer bb = ByteBuffer.wrap(bytes);
return bb.getInt();
}
よろしくお願いします!