[英]Coordinate Id of same card that is read by two different card readers
在軟件的一部分中,卡由讀卡器讀取並分配給用戶。 而在該軟件的其他部分中,在同一讀卡器的終端中,將通過卡序列號等讀取用戶卡並從數據庫中獲取數據。
在該軟件的新部分中,有一個帶有新讀卡器的新終端。 從此讀卡器讀取卡,並從數據庫等中獲取數據。
因此,現在的問題是,這兩個讀卡器讀取的同一張卡的類型不同。 第一個設備返回卡ID為十六進制字符串,如下所示:
2E 6F 27 3F
該十六進制字符串將轉換為十進制並存儲在數據庫中。 例如,上面的十六進制字符串將轉換為該整數:
779036479
現在,當第二個讀卡器讀取同一張卡時,卡ID是一個字節數組,類似於該卡的字節:
byte0: 49
byte1: 48
byte2: 53
byte3: 57
byte4: 53
byte5: 52
byte6: 56
byte7: 57
byte8: 55
byte9: 52
如何將同一張卡的兩個序列號相互協調? 換句話說,我想將此字節數組轉換為相應的十六進制代碼,以便此十六進制代碼是返回第一個設備的那張卡的序列號?
該卡是Mifare。
答案是第二個閱讀器正在返回ASCII編碼的小數。 您的電話號碼是1059548974
。 如果使用Big Endian編碼,則編碼為十六進制的數字為3F276F2E
。 如果您使用Little Endian編碼,那么您會得到2E6F273F
,它應該是您熟悉的。
所以:
"1059548974"
Convert.ToUInt32(str);
將該字符串轉換為整數Convert.ToUInt32(str);
反轉字節的最佳方法可能是這段代碼:
public static UInt32 ReverseBytes(UInt32 value)
{
return (value & 0x000000FFU) << 24 | (value & 0x0000FF00U) << 8 |
(value & 0x00FF0000U) >> 8 | (value & 0xFF000000U) >> 24;
}
很難確切地理解您到底想要什么,但在底部您要說:“換句話說,我想將此字節數組轉換為相應的十六進制代碼”。
您可以像這樣執行該操作:
public static string ByteArrayToString(byte[] ba)
{
StringBuilder sb = new StringBuilder(ba.Length * 2);
foreach (byte b in ba)
{
sb.AppendFormat("{0:x2}", b);
}
return sb.ToString();
}
只需傳入您的Byte數組,結果將是字符串格式的十六進制轉換。
編輯:這可能會產生相同的結果,但是請嘗試以下操作:
byte[ ] bytes = {0, 1, 2, 4, 8, 16, 32, 64, 128, 255 }
Console.WriteLine( BitConverter.ToString( bytes ) );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.