|
|
100精币
1.计算出文件的size
2.计算出md5值,比如"468740f5b1629aa305db99e56e15cd88"
3.截取前16位,"468740f5b1629aa3"
4.转换成unsigned int64,比如:5082102128498088611
5.获取文件的size,如果size为0,直接返回
6.对文件大小取模,r1=5082102128498088611%23512=17579
7.得出range:[r, r+8)
8.如果r+8>=size,调整为[r, size)
2.读取本地文件的range值的byte,计算proof_code
base64(filedata[r,r+8))
示例代码
type ProofRange struct {
Start int64
End int64
}
func getProofRange(input string, size int64) (*commonmodel.ProofRange, error) {
if size == 0 {
return &commonmodel.ProofRange{}, nil
}
tmpStr := utils.MD5Str(input)[0:16]
tmpInt, err := strconv.ParseUint(tmpStr, 16, 64)
if err != nil {
return nil, err
}
index := tmpInt % uint64(size)
pr := &commonmodel.ProofRange{
Start: int64(index),
End: int64(index) + 8,
}
if pr.End >= size {
pr.End = size
}
return pr, nil
}
|
最佳答案
查看完整内容
易语言可以,16进制转10进制的时候可以用长整数,取余可以用大数
回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。 友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。 快捷通道:申请荣誉值 →
|