[VB6 ] 請問各為前被關於 CRC16

看板Visual_Basic作者 (中技運動會相簿=>)時間19年前 (2005/12/25 20:39), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
作業需求 CRC16 Code.. 我自己寫了一次,但是就是run不出來 Dim a(3) As Byte a(0) = 97 ' 求'a'字元的FCS,FCS意旨在原始文字後接上16bit的0進行crc運算 a(1) = 0 '8bit 0 a(2) = 0 '8bit 0 Debug.Print crc16b(a) 正確的crc餘值為 8145.. 但是我怎麼run都是錯,已經不知道該怎麼改了 煩請有相關設計經驗的人指點! Function crc16b(data() As Byte) As String Dim crch, crcl As Byte 'crch,crcl為crc16高低位 Dim becrch, becrcl As Byte '存放餘值 Dim tmp As Byte '強迫數值為Byte用 Dim nowp '目前計算位置 becrch = &HFF '初始皆是 11111111 becrcl = &HFF '同上 crcl = &H5 'CRC16 的計算式 X^16+X^15+X^2+X^1 = 11000000000000101 = H018005 crch = &H80 '同上,X^16不記入 所以是高位H80 低為H05 becrch = becrch And data(0) becrcl = becrcl And data(1) '載入欲計算陣列(0) (1)於高低位 nowp = 16 '因載入兩陣列16bits '所以nowp跳至16 Do Until nowp = UBound(data) * 8 '運算直到nowp=陣列最後bit If (becrch And &H80) = &H0 Then '若餘值高位元的最高位為0 becrch = byteLeft(becrch, 1) '餘值高位元左移1bits If (becrcl And &H80) = &H1 Then '若餘值低位元的最高位為1 becrch = becrch Or 1 '高位元最後值填入1 End If becrcl = byteLeft(becrcl, 1) '餘值低位元左移1 tmp = 2 ^ (8 - nowp Mod 8) '取出下一值所需的二進制 If data(Int(nowp / 8 + 1)) And tmp Then '若下一值(需補上的)為1 becrcl = becrcl Or 1 '餘值低位元最後值填入1 End If nowp = nowp + 1 '運算位置累加1 Else becrch = becrch Xor crch '若最高位不是0 becrcl = becrcl Xor crcl '高低位皆對進行對應crc進行XOR End If Loop crc16b = Hex(becrch) & Hex(becrcl) '印出餘值16進位 End Function -- NTIT 05' 運動會 (詳見下列Album) Album = http://www.wretch.cc/album/rmrug = Guest Book = http://gb1.demons.to/afgb.php?A=sniperliao = -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.221.15.86
文章代碼(AID): #13hfCV7n (Visual_Basic)
文章代碼(AID): #13hfCV7n (Visual_Basic)