修改了计算方式，其中注意java无unsigned char，使用byte时，一部分回被翻译成负数，此时通过下式
int positiveValue = origin&0xFF；
来得到该byte代表的正数值，其中，origin为byte类型
see http://xiaolongfeixiang.iteye.com/blog/648700