【发布时间】:2014-08-26 14:46:41
【问题描述】:
我正在使用 airspayce.com 的 RadioHead Packet Radio 库。在示例(nrf24_reliable_datagram_client & server)中,它们让两个节点通过来回发送字符串来相互通信。现在我想在那里发送一个 int 而不是一个字符串,并对这些数据做一些事情。这就是他们在示例中所做的:
定义buf字节。
uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN];
这个函数接收数据:
manager.recvfromAckTimeout(buf, &len, 500, &from)
打印 buf 变量。
Serial.print((char*)buf);
到目前为止一切顺利。现在我想做类似的事情:
int value = (char*)buf;
或者:
char value[10] = { (char*)buf };
然后我得到:
invalid conversion from 'char*' to 'int' (or to 'char'...)
旁边,在我发送数据的另一边,我有:
uint8_t data[] = { analogRead(A0) };
当我在接收方打印此数据时,使用第一个问题中的代码,我得到了奇怪的字符。所以我想,让我们试试吧:
Serial.print((char*)buf, DEC); // or BYTE
然后我得到:
call of overloaded 'print(char*, int)' is ambiguous
我做错了什么?提前致谢!
【问题讨论】:
-
你做错了类型转换。例如,要从缓冲区转换为指向
char的指针,然后期望它神奇地转换为int。进行这种转换的适当方法是int value = * ( (int*)buf );- 注意结果指针的取消引用以获得它指向的值 -
好读的是 wiki 字节序。这是一个老问题。
标签: string pointers arduino int uint8t