码迷,mamicode.com
首页 > 移动开发 > 详细

Go与Android的CRC32/Adler32算法使用

时间:2015-04-12 12:06:13      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:打包   数据效检   adler32   crc32   

       Packet在网络传输中必须要考虑万一数据损坏的情况,CRC32与Adler32都是最常用的算法。
Go与Android都内置好了这两种算法的实现,直接使用就好。

Go的调用方式如下:

// 校验算法(ADLER32/CRC32)例子
//author: Xiong Chuan Liang
//date: 2015-4-12

package main

import (
	"fmt"
	"hash/adler32"
	"hash/crc32"
)

var ADLER32 int = 0
var CRC32 int = 1

func main() {
	for _, v := range []string{"aaaaaaaaaa", "3333sdfsdffsdffsd", "234esrewr234324", `An Adler-32 checksum is obtained by calculating two 16-bit checksums A and B and concatenating their bits into a 32-bit integer. A is the sum of all bytes in the stream plus one, and B is the sum of the individual values of A from each step.
					At the beginning of an Adler-32 run, A is initialized to 1, B to 0. The sums are done modulo 65521 (the largest prime number smaller than 216). The bytes are stored in network order (big endian), B occupying the two most significant bytes.
					The function may be expressed as
					A = 1 + D1 + D2 + ... + Dn (mod 65521)
					 B = (1 + D1) + (1 + D1 + D2) + ... + (1 + D1 + D2 + ... + Dn) (mod 65521)
					   = n×D1 + (n?1)×D2 + (n?2)×D3 + ... + Dn + n (mod 65521)
					 Adler-32(D) = B × 65536 + A
					where D is the string of bytes for which the checksum is to be calculated, and n is the length of D.`} {
		calc(ADLER32, []byte(v))
		calc(CRC32, []byte(v))
	}
}

func calc(t int, b []byte) {
	var ret uint32
	if ADLER32 == t {
		ret = adler32.Checksum([]byte(b))
		fmt.Printf("ADLER32 %15d  : %s...  \n", ret, string(b[:5]))
	} else if CRC32 == t {
		ret = crc32.ChecksumIEEE([]byte(b))
		fmt.Printf("CRC32   %15d  : %s...  \n", ret, string(b[:5]))
	} else {
		return
	}
}
      

     Android的就不举例了,相关包有详细说明:
CRC32:
http://wear.techbrood.com/reference/java/util/zip/CRC32.html
Adler32:
http://wear.techbrood.com/reference/java/util/zip/Adler32.html

两者效果都差不多,不过Adler32相对来说计算量会小些。 


BLOG: http://blog.csdn.net/xcl168




Go与Android的CRC32/Adler32算法使用

标签:打包   数据效检   adler32   crc32   

原文地址:http://blog.csdn.net/xcl168/article/details/45008445

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!