[VB6 ] 請問各為前被關於 CRC16
作業需求 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
Visual_Basic 近期熱門文章
PTT數位生活區 即時熱門文章