快手的一個面試題
阿新 • • 發佈:2018-12-11
題目:資料包有512個位元組,處理:每個包會加4個校驗字元;offset為開始的位置,length表示取出資料的長度,現在給你一個處理完的檔案,請你取出從offset位置開始長為length的原始資料(即沒有校驗字串);
哪些坑呢:
1.offset可能是從某個資料包的中間開始的,同樣offset+length定位的位置可能是某個資料包的中間;(一腳踩坑裡了)
2.offset好像不是處理過後的檔案開始位置,而是原始資料包(無校驗)中的位置,包括length也是;(我忘了,我就當成是處理後的檔案實現了下)
def check(target,offset,length): end = offset + length - 1 temp = (offset/5+1)*5 - 1 if temp >= end: return target[offset:end+1] if temp < end: tmp = target[offset:temp+1] while temp + 4 < end: tmp += target[temp+5:temp + 10] temp = temp + 9 if offset > end: temp -= 9 tmp += target[temp:end+1] return tmp x = [2,2,2,2,2,1,1,1,1,3,3,3,3,3,1,1,1,1,4,4,4,4,4,1,1,1,1] offset = 2 length = 8 print check(x,offset,length)
然後我就涼了;