2016年03月17日

Felicaで既知のサービスコードとブロック番号に書かれている文字列を読み取る(VB.net)



Felicaでちょっと遊んでいるのですが、とあるカードには、とあるサービスコードのとあるブロック番号に
とある文字列が書き込まれていて、それを読みだすといろいろ便利なことが出来そうです。
ということで、ここのページで公開されている「CFelicaLib.vb」に機能を追加しました。

    '=============================================
    '【関 数 名】read_string
    '【第1引数】[in]  Integer  サービスコード
    '【第2引数】[in]  Byte  ブロック番号
    '【戻 り 値】[out] String   文字列
    '---------------------------------------------
    ' 既知のサービスコードとブロック番号から文字列を読み取る
    '=============================================
    Public Function read_string(ByVal serviceCode As Integer, ByVal address As Byte) As String
        Try
            '------------
            ' エラー処理
            '------------
            If f_ptr = IntPtr.Zero Then
                Return ""
            End If

            '----------
            ' 変数定義
            '----------
            Dim rStr As String
            Dim buf(15) As UInt8

            '-------------------------
            ' 変数bufのアドレスを取得
            '-------------------------
            Dim gch As GCHandle = GCHandle.Alloc(buf, GCHandleType.Pinned)
            Dim b As IntPtr = gch.AddrOfPinnedObject().ToInt32

            '-------------
            ' 指定したサービス、アドレスから読み取り
            '-------------
            felica_read_without_encryption02(f_ptr, serviceCode, 0, address, b)
            rStr = System.Text.Encoding.ASCII.GetString(buf) 'HexToAsc(buf)

            '--------------
            ' メモリの解放
            '--------------
            gch.Free()

            '------------
            ' 結果を返す
            '------------
            Return rStr
        Catch ex As Exception
            MessageBox.Show(ex.Message, "read_str()")
            Return ""
        End Try
    End Function
 

作者の白執事様に感謝します。
posted by MON at 21:26| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする
【今是昨非】http://nomulabo.com/