0

私はBlackBerryアプリに取り組んでいます。このアプリは、「Basic4Android」プログラムですでに Android で開発されています。Android アプリのコードは vb.net で記述されています。BlackBerry 用にまったく同じコードを記述する必要があります。この方法を理解しようとしていますが、vb.net の専門家ではないため理解できません。メソッド全体を貼り付けるのではなく、明確にする必要がある部分のみを貼り付けます。

Sub HEX_T24_SHORT_GPS(latitude_decimal_degrees As Double, longitude_decimal_degrees As Double, speed_knots As Int, heading_degrees As Int, time_seconds_since_midnight_gmt As Int, alert_on As Boolean, alert_ack As Boolean, external_interface_control As Boolean, send_extended As Boolean) As String
    Dim pBuffer(11) As Int
    pBuffer(0)=0 ' T24 MSGID 0
    Log("pBuffer(2)" & pBuffer(2))
    Dim t1 As Double
    'Get latitude sign
    Dim lat_south As Boolean
    lat_south=True
    If latitude_decimal_degrees<0 Then lat_south=False
    'Get Longitude sign 
    Dim lon_west As Boolean
    lon_west=True
    If longitude_decimal_degrees<0 Then lon_west=False
    'Get number of second since midnigh extra bit
    Dim num_of_second_extra_bit As Boolean 
    num_of_second_extra_bit=False
    If time_seconds_since_midnight_gmt > 0xFFFF Then num_of_second_extra_bit=True
    'Convert latitude in bytes 1 to 3
    latitude_decimal_degrees = Abs(latitude_decimal_degrees*60000)

「If time_seconds_since_midnight_gmt > 0xFFFF」とはどういう意味ですか? ここで何が起こっているのか「latitude_decimal_degrees = Abs(latitude_decimal_degrees*60000)」。「Basic4Android」のドキュメントを確認しましたが、Abs API が見つかりませんでした。

If num_of_second_extra_bit=True Then latitude_decimal_degrees=latitude_decimal_degrees + 0x800000
    pBuffer(1)=Bit.ShiftRight(Bit.And(latitude_decimal_degrees, 0xFF0000),16)
    pBuffer(2)=Bit.ShiftRight(Bit.And(latitude_decimal_degrees, 0x00FF00),8)
    pBuffer(3)=Bit.And(latitude_decimal_degrees, 0xFF)

ビットシフトはどのように適用されますか? int 値と 16 進数値の間で「AND」演算が使用されていますか? pBuffer(1) の最終的な値は? ステップ pBuffer(1) から pBuffer(3) の目的は何ですか。それは何をしていて、latitude_decimal_degrees の最終値は何ですか?最終値はバイト、バイト配列、または 16 進数ですか?説明してください。

4

1 に答える 1

2

「If time_seconds_since_midnight_gmt > 0xFFFF」とはどういう意味ですか?

これが行うことは、time_seconds_since_midnight_gmt が 65,535 より大きいかどうかをチェックすることです。これはおそらく何らかの補正です。1 日は 86,400 秒であることを思い出してください。

ここで何が起こっているのか "latitude_decimal_degrees = Abs(latitude_decimal_degrees*60000)"

緯度の小数部分は 60,000 で乗算されています - これは何が起こっているのかに基づいたコンテキストです - おそらくあなたが移動している速度と関係があります - この関数がどこから呼び出されているかを調べて、計算してみてくださいこの変数に入る数値範囲を調べて、そこから推測してみてください。

ビットシフトはどのように適用されますか?

最初の 0x800000 が追加されます (これにより、ビット番号 23 が高く設定されます)

int 値と 16 進数値の間で「AND」演算が使用されていますか?

はい。混同しているようです-整数値は、基数2(2進数)、基数8(8進数)、基数10(通常の方法)、および基数16(16進数)で表すことができます-それでも同じ値です。

pBuffer(1) の最終的な値は? 説明してください。

では、例を見てみましょう。

latitude_decimal_degrees = 0xE653 (58,963)

次に 0x800000 を追加します

緯度 = 0x80E653

次に、0xFF0000 で

緯度 = 0x800000

そして最後に 16 だけ右シフト

緯度 = 0x000080

一方、これが何を意味するかは、あなたの解釈次第です。

于 2012-12-10T10:12:26.953 に答える