如何在不使用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
答案 0 :(得分:0)
SkipBlock
字符串和Contains(…)
对我来说很奇怪,除非有充分的理由使用字符串,否则请使用HashSet<int>
:
HashSet<int> SkipBlock = new HashSet<int>(){ 3, 7, 11, … };
以后:
if (SkipBlock.Contains(i)) {
使用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块中具有不同的含义,则可以使用相同的FieldOffset
定义字段,即:
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
包含有效数据。< / LI>
byte
和int
(4个字节);即,使用int
,然后使用偏移量超过一个字节的内容就会出现问题(例如SendBuff(7) = CInt(i): Sendbuf(8) = &H60
)。