【发布时间】:2016-08-01 10:00:49
【问题描述】:
在我当前的项目中,我有 RFID 徽章,它向我的Arduino UNO 发送一个 10 个字符的 ID(例如:2700BBA0E8)。文档说“可打印的 ASCII”,但我不知道它是否总是 [0-9A-F]。
在 Arduino 上,内存是有限的:
-
char是1 byte -
int是2 bytes -
long是4 bytes
int 或 long 会比 char[10] 更短并且更易于比较(strcmp() 与 ==),所以我想知道如何将收到的 10 个字符一一转换(在串行)到int 或long?
感谢您的帮助
【问题讨论】:
-
即使 10 个十六进制数字 [0-9A-F] 也是 5 个字节,因此不止一个
long。 -
您可以将前 2 个值放入一个 int 中,将后 8 个值放入一个 long 中,并与逻辑和两个变量进行比较,但我很确定额外的这样做的代码不仅仅是做一个
strcmp,而且更复杂。 -
@AntonH 此外,如果您将
int和long放入同一个结构中,由于内存对齐,这可能需要整个 8 个字节。 (我不知道这对 Arduino 到底是如何工作的)。 -
@MarkusLaire 可能,是的。有一些方法可以绕过内存对齐,例如使用
pragma pack,但我不知道它们与 Arduino 的配合情况如何(尽管我看不出它不应该这样做的原因)。 -
说到“比较简单”,AVR是一个8位处理器,它只有8位寄存器。因此,您不会像在 32 位处理器上那样获得字比较的好处。
标签: c++ c avr arduino-uno