android checksum校验
生活随笔
收集整理的這篇文章主要介紹了
android checksum校验
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
checksum就是校驗(yàn)碼,和md5的概念可以說是一樣的,只是算法不一樣.
checksum的算法也都不一樣,看定的協(xié)議是怎么樣的
我這邊的業(yè)務(wù)場(chǎng)景是需要android端給打印機(jī)發(fā)送一個(gè)升級(jí)指令,兩個(gè)是由藍(lán)牙通訊的,打印機(jī)就需要校驗(yàn)下升級(jí)文件
我們定的checksum協(xié)議:將實(shí)際文件按無符號(hào)字節(jié)類型累加,保留低4字節(jié)
注:因?yàn)閖ava里面默認(rèn)的類型都是有符號(hào)類型的,所以需要先把文件的字節(jié)轉(zhuǎn)成無符號(hào)類型的累加 就OK了. 直接上代碼,注釋都很清楚
byte[] write =new byte[(int)upgradeFile.length()]; //升級(jí)文件先寫到字節(jié)數(shù)組中 FileInputStream inputStream= null; try {inputStream = new FileInputStream(upgradeFile); inputStream.read(write); inputStream.close(); } catch (FileNotFoundException e) {e.printStackTrace(); } catch (IOException e) {e.printStackTrace(); } int fileByte=0; //做累加 for (byte b:write) { fileByte+=b&0xff; //b&0xff 就是將字節(jié)轉(zhuǎn)為無符號(hào)類型的 }byte[] loB4=intToBytes(fileByte); //checksum 取低四字節(jié)
/** * 將int數(shù)值轉(zhuǎn)換為占四個(gè)字節(jié)的byte數(shù)組 * @param value * 要轉(zhuǎn)換的int值 * @return byte數(shù)組 */ public static byte[] intToBytes( int value ) {byte[] src = new byte[4]; src[3] = (byte) ((value>>24) & 0xFF); src[2] = (byte) ((value>>16) & 0xFF); src[1] = (byte) ((value>>8) & 0xFF); src[0] = (byte) (value & 0xFF); return src; }
?代碼很簡(jiǎn)單這樣子checksum就算完了
剛開始做的時(shí)候浪費(fèi)了一點(diǎn)時(shí)間 就是因?yàn)椴恢纉ava默認(rèn)都是有符號(hào)類型的, 累加完了才轉(zhuǎn)為無符號(hào)類型.
總結(jié)
以上是生活随笔為你收集整理的android checksum校验的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小马哥---高仿苹果6s 主板H339
- 下一篇: 第九届蓝桥杯——星期一