在我当前的项目中,我有RFID徽章,可以将10个字符的ID发送给我Arduino UNO
(例如:)2700BBA0E8
。该文档说“可打印的ASCII”,但我不知道它是否总是[0-9A-F]
。
在Arduino上,内存有限:
char
是 1 byte
int
是 2 bytes
long
是 4 bytes
anint
或along
会比a短,char[10]
并且比较起来比较简单(strcmp()
vs ==
),所以我想知道如何将接收到的10个字符一一(串行)转换为anint
或a long
?
谢谢你的帮助
如前所述,您希望将5个字节放入long
只能存储4个字节的内。另外,您必须使用结构:
struct RFIDTagId
{
unsigned long low;
unsigned long high; // can also be unsigned char
};
并使用类似的东西:
unsigned int hex2int(char c)
{
if (c >= 'A' && c <= 'F')
return (c - 'A' + 0x0A);
if (c >= '0' && c <= '9')
return c - '0';
return 0;
}
void char2Id(char *src, RFIDTagId *dest)
{
int i = 0;
dest->low = 0;
for(i = 0; i < 8; ++i)
{
dest->low |= hex2int(src[i]) << (i*4);
}
dest->high = 0;
for(i = 8; i < 10; ++i)
{
dest->high |= hex2int(src[i]) << ((i-8)*4);
}
}
并比较2个ID:
int isRFIDTagIdIsEqual(RFIDTagId * lhs, RFIDTagId * rhs)
{
return lhs->low == rhs->low && lhs->high == lhs->high;
}
或者如果您确实有c ++:
bool operator==(RFIDTagId const & lhs, RFIDTagId const & rhs)
{
return lhs.low == rhs.low && lhs.high == lhs.high;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句