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
作者の白執事様に感謝します。