Android 二进制文件的读写
我想读写一个Lowrance.usr文件。这是一个具有特定数据结构的二进制文件,我已设法对其进行解码,并用visual basic编写了一个程序,用于执行必要的读写操作。我正在把这个软件移植到我的android手机上 我在VB中定义的结构是:Android 二进制文件的读写,android,vb.net,Android,Vb.net,我想读写一个Lowrance.usr文件。这是一个具有特定数据结构的二进制文件,我已设法对其进行解码,并用visual basic编写了一个程序,用于执行必要的读写操作。我正在把这个软件移植到我的android手机上 我在VB中定义的结构是: Public Structure WAYPOINT Public wWaypointNum As Integer Public dwLatitudeMM As Long Public dwLongitudeMM As Long
Public Structure WAYPOINT
Public wWaypointNum As Integer
Public dwLatitudeMM As Long
Public dwLongitudeMM As Long
Public dwAltitudeFT As Long
Public dwWaypointNmLength As Long
Public abWaypointName As Char()
Public wWaypointDescLength As Long
Public abWaypointDescription As Char()
Public dwWaypointTime As Long
Public dwWaypointSymbol As Long
Public wWaypointStatus As Integer
End Structure
然后使用以下代码读取该文件:
Private Sub btnRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRead.Click
Dim i As Integer
Dim objBR As BinaryReader
Dim objFS As FileStream
Dim objWP As New WAYPOINT
Dim objwVer As Integer
Dim objwSVer As Integer
Dim objNoWaypoints As Integer
Dim objNoRoutes As Integer
Dim TempLat As Double
Dim TempLng As Double
Dim LatString As String
Dim LngString As String
objFS = New FileStream("c:\Binary\Binary File\Binary File\waverider.usr", FileMode.Open)
objBR = New BinaryReader(objFS)
objBR.BaseStream.Seek(0, SeekOrigin.Begin)
objwVer = objBR.ReadInt16
objwSVer = objBR.ReadInt16
objNoWaypoints = objBR.ReadInt16
For i = 1 To objNoWaypoints
objWP = Nothing
With objWP
.wWaypointNum = objBR.ReadInt16
.dwLatitudeMM = objBR.ReadInt32
.dwLongitudeMM = objBR.ReadInt32
.dwAltitudeFT = objBR.ReadInt32
.dwWaypointNmLength = objBR.ReadInt32
.abWaypointName = objBR.ReadChars(.dwWaypointNmLength)
.wWaypointDescLength = objBR.ReadInt32
.abWaypointDescription = objBR.ReadChars(.wWaypointDescLength)
.dwWaypointTime = objBR.ReadInt32
.dwWaypointSymbol = objBR.ReadInt32
.wWaypointStatus = objBR.ReadInt16
End With
TempLat = objWP.dwLatitudeMM / EarthRad
TempLat = Math.Exp(TempLat)
TempLat = (2 * Math.Atan(TempLat)) - (Math.PI / 2)
TempLat = TempLat * RadToDeg
LatString = DegToDecMin(TempLat, "Lat")
TempLng = objWP.dwLongitudeMM / EarthRad
TempLng = Math.Exp(TempLng)
TempLng = (2 * Math.Atan(TempLng)) - (Math.PI / 2)
TempLng = TempLng * RadToDeg
LngString = DegToDecMin(TempLng, "Lng")
With lvWaypoints
Dim lv As ListViewItem = .Items.Add(objWP.abWaypointName)
With lv
.SubItems.Add(objWP.abWaypointDescription)
.SubItems.Add(LatString)
.SubItems.Add(LngString)
End With
End With
Next i
'\\ Read Routes
'objNoRoutes = objBR.ReadInt16 'Number of Routes
End Sub
然后使用以下方法对数据进行解码:
Public Function DegToDecMin(ByVal DecDeg As Double, ByVal LatLng As String) As String
Dim ReturnValue As String
Dim Pos As String
If LatLng = "Lat" Then
If DecDeg < 0 Then Pos = "S" Else Pos = "N"
Else
If DecDeg < 0 Then Pos = "W" Else Pos = "E"
End If
Dim mDeg As Double = Math.Abs(DecDeg)
Dim mWholeDeg As Double = Math.Truncate(mDeg)
Dim mRemDegS As String = String.Format("{0:##.000}", (mDeg - mWholeDeg) * 60)
If InStr(mRemDegS, ".") = 2 Then mRemDegS = "0" & mRemDegS
If InStr(mRemDegS, ".") = 1 Then mRemDegS = "00" & mRemDegS
ReturnValue = mWholeDeg.ToString & Chr(176) & mRemDegS & "'" & Pos
Return ReturnValue
End Function
公共函数DegToDecMin(ByVal dededeg为Double,ByVal LatLng为String)为String
将返回值设置为字符串
作为字符串的Dim Pos
如果LatLng=“Lat”,则
如果dedeg<0,则Pos=“S”Else Pos=“N”
其他的
如果dedeg<0,则Pos=“W”Else Pos=“E”
如果结束
尺寸mDeg为双=数学绝对值(十度)
Dim mWholeDeg As Double=数学截断(mDeg)
Dim mRemDegS As String=String.Format(“{0:###.000}”,(mDeg-mWholeDeg)*60)
如果InStr(mRemDegS,“.”=2,则mRemDegS=“0”&mRemDegS
如果InStr(mRemDegS,“.”=1,则mRemDegS=“00”&mRemDegS
ReturnValue=mWholeDeg.ToString&Chr(176)&mRemDegS&“'”和Pos
返回值
端函数
Java中是否有类似的功能可以实现相同的目标,因为Java唯一的语法是根据Java语法进行更改 首先需要创建一个bean文件,如下所示
public class WayPoint
{
public int wWaypointNum;
public int dwLatitudeMM;
public dwLongitudeMM;
...
}
其次,您需要文件API来读写文件。为此,您可以使用、、