10 个字符字符串到 Arduino 上的 int
10 char string to int on Arduino
在我当前的项目中,我有 RFID 徽章,它向我的 Arduino UNO
(例如:2700BBA0E8
)发送一个 10 个字符的 ID。文档说 "Printable ASCII",但我不知道它是否总是 [0-9A-F]
。
在Arduino上,内存是有限的:
char
是 1 byte
int
是 2 bytes
long
是 4 bytes
int
或 long
会比 char[10]
短并且更容易比较(strcmp()
vs ==
),所以我想知道如何我可以将收到的 10 个字符(连续)一个一个地转换为 int
或 long
?
感谢您的帮助
如前所述,您想将 5 个字节放入只能存储 4 个字节的 long
中。另外,你必须使用结构:
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;
}
在我当前的项目中,我有 RFID 徽章,它向我的 Arduino UNO
(例如:2700BBA0E8
)发送一个 10 个字符的 ID。文档说 "Printable ASCII",但我不知道它是否总是 [0-9A-F]
。
在Arduino上,内存是有限的:
char
是1 byte
int
是2 bytes
long
是4 bytes
int
或 long
会比 char[10]
短并且更容易比较(strcmp()
vs ==
),所以我想知道如何我可以将收到的 10 个字符(连续)一个一个地转换为 int
或 long
?
感谢您的帮助
如前所述,您想将 5 个字节放入只能存储 4 个字节的 long
中。另外,你必须使用结构:
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;
}