*上下文:我想要使用libnfc從Mifare卡測試Uid。我已經被拆開這個例子:http://nfc-tools.org/index.php?title=Libnfc:quick_start_example *C中的十六進制比較
print_hex是在連接例如頂部的輔助功能,它是這樣的:
print_hex(const uint8_t *pbtData, const size_t szBytes)
{
size_t szPos;
for (szPos = 0; szPos < szBytes; szPos++) {
printf("%02x ", pbtData[szPos]);
}
printf("\n");
}
我可以輸出這樣的卡的UID:
print_hex(nt.nti.nai.abtUid, nt.nti.nai.szUidLen);
而這就是我得到:
9f d8 a2 00
我想比較這agains TA儲值,是這樣的:
if (*nt.nti.nai.abtUid == 0x9fd8a200) {
但給我的警告:
reader.c:81:28: warning: comparison of constant 2681774592 with expression of type 'uint8_t' (aka 'unsigned char') is always false [-Wtautological-constant-out-of-range-compare]
if (*nt.nti.nai.abtUid == 0x9fd8a200) {
~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
如果我更改爲:
if ((int)*nt.nti.nai.abtUid == 0x9fd8a200) {
它編譯但不匹配,如果我改爲:
if (nt.nti.nai.abtUid == 0x9fd8a200) {
printf("Winner\n");
}
它給出了一個警告:
reader.c:81:27: warning: comparison between pointer and integer ('uint8_t *' (aka 'unsigned char *') and 'unsigned int')
if (nt.nti.nai.abtUid == 0x9fd8a200) {
援助讚賞!
編輯
這是什麼工作:
const uint8_t winner[] = { 0x9f, 0xd8, 0xa2, 0x00};
if (memcmp(nt.nti.nai.abtUid, winner, 4) == 0) {
printf("Winner\n");
}
看看'memcmp()' – Deduplicator
@Deduplicator我可以使用memcmp()當一個對象是不是指針?你能給個例子嗎?此外,字節數可能會改變。 – SimonJGreen
顯然你需要使用'print_hex'或其他方法將兩者轉換爲相同的格式。甚至可能在編譯時/之前。 – Deduplicator