这看起来是否正确?我试图将这个校验和方法从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