Vb.net 如何选择性地写入RFID标签?

Vb.net 如何选择性地写入RFID标签?,vb.net,rfid,Vb.net,Rfid,如何在不使用For循环的情况下有效地写入RFID标签。现在我正在循环并填充系列中的所有块。我想做一个程序,我可以用特定的值填充特定的块。我想知道是否有其他方式在RFID上书写。下面的代码显示了使用for循环在RFID上进行写入,该循环跳过整数 这是我的密码: Private Sub RFIDAuth() Dim SkipBlock As String SkipBlock = ",3,7,11,15,19,23,27,31,35,39,43,47,51,55,59," Fo

如何在不使用
For
循环的情况下有效地写入RFID标签。现在我正在循环并填充系列中的所有块。我想做一个程序,我可以用特定的值填充特定的块。我想知道是否有其他方式在RFID上书写。下面的代码显示了使用for循环在RFID上进行写入,该循环跳过整数

这是我的密码:

Private Sub RFIDAuth()
    Dim SkipBlock As String
    SkipBlock = ",3,7,11,15,19,23,27,31,35,39,43,47,51,55,59,"
    For i = 1 To 62
        If SkipBlock.Contains("," & CStr(i) & ",") = False Then
            Call ClearBuffers()
            SendBuff(0) = &HFF                      'CLA
            SendBuff(2) = &H0                       'P1: same for all source types
            SendBuff(1) = &H86                      'INS: for stored key input
            SendBuff(3) = &H0                       'P2: for stored key input
            SendBuff(4) = &H5                       'P3: for stored key input
            SendBuff(5) = &H1                       'Byte 1: version number
            SendBuff(6) = &H0                       'Byte 2
            SendBuff(7) = CInt(i)         'Byte 3: sectore no. for stored key input

            SendBuff(8) = &H60                  'Byte 4 : Key A for stored key input
            'SendBuff(8) = &H61                  'Byte 4 : Key B for stored key input
            SendBuff(9) = &H20                  'Byte 5 : Session key for volatile memory
            'SendBuff(9) = CDec(<INPUT>)    'Byte 5 : Session key for non-volatile memory
            SendLen = &HA
            RecvLen = &H2

            retCode = SendAPDUandDisplay(0)
            Base64StrfrmRFID = Base64StrfrmRFID & RFIDRead(i)

        End If
    Next
End Sub
Private Sub RFIDAuth()
将SkipBlock变暗为字符串
SkipBlock=“,3,7,11,15,19,23,27,31,35,39,43,47,51,55,59,”
对于i=1到62
如果SkipBlock.Contains(“,”&CStr(i)&“,”)=False,则
调用ClearBuffers()
SendBuff(0)=&HFF'CLA
SendBuff(2)=&H0'P1:对于所有源类型相同
SendBuff(1)=&H86'插入:用于存储的键输入
SendBuff(3)=&H0'P2:用于存储的键输入
SendBuff(4)=&H5'P3:用于存储的按键输入
SendBuff(5)=&H1'字节1:版本号
SendBuff(6)=&H0'字节2
SendBuff(7)=CInt(i)'字节3:存储密钥输入的扇区编号
SendBuff(8)=&H60'字节4:用于存储密钥输入的密钥A
“SendBuff(8)=&H61”字节4:用于存储密钥输入的密钥B
SendBuff(9)=&H20'字节5:易失性内存的会话密钥
“SendBuff(9)=CDec()”字节5:非易失性内存的会话密钥
SendLen=&HA
RecvLen=&H2
retCode=SendAPDUandDisplay(0)
Base64StrfrmRFID=Base64StrfrmRFID&RFIDRead(i)
如果结束
下一个
端接头
SkipBlock:哈希集而不是字符串
SkipBlock
字符串和
包含(…)
对我来说似乎很奇怪,请使用
HashSet
,除非有充分的理由使用该字符串:

HashSet<int> SkipBlock = new HashSet<int>(){ 3, 7, 11, … };
RFID布局的结构 使用
struct
指定RFID的布局:

[StructLayout (LayoutKind.Explicit, Pack=1, Size=…)]
struct RFID_Block {
     [FieldOffset(0)] public const byte CLA = 0xFF;
     [FieldOffset(1)] public const byte INS = 0x86;
     [FieldOffset(2)] public const byte P1 = 0x0;
     …
     [FieldOffset(7)] public int SectorNumber; // Should this be an int or a byte?
};

RFID_Block block1 = new RFID_Block();
block1.SectorNumber = i;
…
  • 对于每个块相同的字段使用常量,对于可能不同的字段使用非常量
  • 如果字段在不同类型的RFID块中具有不同的含义,则可以使用相同的
    字段偏移量定义字段,即:

    struct DualUseRFID_Block {
         …
         // Stored key input block
         [FieldOffset(2)] public byte P2;
         [FieldOffset(3)] public byte P3;
    
         // Some other kind of RFID Block:
         [FieldOffset(2)] public word FooBar;
    
    注:

    • 首先,
      FooBar
      P2
      具有相同的字段偏移量
    • 其次,
      FooBar
      的类型与
      P2
      不同;及
    • 第三,
      FooBar
      占用与
      P2
      P3
      相同的内存空间
      FooBar
      P2
      P3
      包含有效数据
  • 检查字段的大小,不要混淆
    字节
    int
    (4字节);i、 e.使用一个
    int
    ,然后偏移量又多了一个字节的某个东西会引发问题(例如
    SendBuff(7)=CInt(i):Sendbuf(8)=&H60
  • 检查C#和RFID芯片是否同意“持久性”
工具书类
  • 看;它包括有关内存布局的详细信息,如果您愿意,结构中的字段可以重叠

您可以发布代码并更具体一些吗?为什么要避免for循环?我想为RFID中的特定块写入特定值。
struct DualUseRFID_Block {
     …
     // Stored key input block
     [FieldOffset(2)] public byte P2;
     [FieldOffset(3)] public byte P3;

     // Some other kind of RFID Block:
     [FieldOffset(2)] public word FooBar;