想必大家在刚接触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 
' --------------- 错误处理 部分, 注意: 前面正常代码必须有 结束语