想必大家在刚接触AIS时,对AIS数据的解码感到困惑,其是采用6位ASCII压缩码传输的,所以对AIS数据的正确解析,就是完成任务的关键所在。通过最近的一个项目,了解了AIS数据的解码分析过程,现将其流程和相关代码列出,此参表可以参见快乐鹦鹉的AIS解码算法一文http://blog.csdn.net/happyparrot/archive/2007/04/26/1585185.aspx。
view plaincopy to clipboardprint?
Public Function fun_Decode(ByVal AISData As String) As String
On Error GoTo DoError
Dim strAisData As String ' 待解码的数据缓冲区
Dim i As Long
Dim strAisBin As String ' 存AIS数据转成二进制的
Dim strTemp As String
Dim strAisDec As String ' 存AIS数据转成十进制的
For i = 1 To Len(AISData)
strTemp = Mid(AISData, i, 1) ' 取ASCII
strAisDec = fun_Hex2Dec(AsciiToHex(strTemp)) ' AIS数据转成十进制的
If CInt(strAisDec) < 48 Or CInt(strAisDec) > 119 Or (CInt(strAisDec) > 87 And CInt(strAisDec) < 96) Then
Exit Function
Else
strAisDec = CStr(CInt(strAisDec) + 40)
If CInt(strAisDec) > 128 Then
strAisDec = CStr(CInt(strAisDec) + 32)
Else
strAisDec = CStr(CInt(strAisDec) + 40)
End If
strAisBin = fun_Hex2Bin(DecToHex(strAisDec)) ' AIS数据转成二进制的
'strAisBin = CDec(strAisDec)
fun_Decode = fun_Decode & (Right("000000" & strAisBin, 6)) ' 取AIS数据低六位
End If
Next i
Debug.Print fun_Decode
Debug.Print Len(fun_Decode)
Debug.Print BinToDec(strAisBin)
Exit Function
' --------------- 错误处理 部分, 注意: 前面正常代码必须有 结束语