這看起來是否正確?我試圖將這個校驗和方法從C移植到Java,但是從我的Java函數返回的值太高。我懷疑我欺騙unsigned int的方式不正確?C到Java端口:計算3個字節的校驗和
char *Generate(char * buffer, long length) {
static char tBuf[4];
long index;
unsigned int checksum;
for(index = 0L, checksum = 0; index < length; checksum += (unsigned int) buffer[index++]);
sprintf(tBuf, "%03d", (unsigned int) (checksum % 256));
return(tBuf);
}
我的Java接口:
public String generateCheckSum(String value) {
char[] chars = value.toCharArray();
long checksum = 0L;
for(int i = 0; i < chars.length; i++) {
checksum += (checksum + (long) chars[ i ]) & 0xFF;
}
return String.valueOf(checksum % 256);
}
任何有識之士非常感謝,感謝
只需要注意一點:Java中的字符串不是*字節數組。它是* chars *的數組,它們是單獨的UTF-16 *代碼單元*。如果你需要一個字節數組的校驗和,那麼使用字節而不是字符。我的Java代碼是: 校驗和=(校驗和+(長)字符[i])&0xFF我的部分在這個問題上是錯別字,我的Java代碼是: – Joey 2009-12-27 05:31:14