将字符数组转换为uint8_t

Casting char array to uint8_t

本文关键字:uint8 转换 字符 数组      更新时间:2023-10-16

我在Arduino库中有一个这样的函数定义:

bool RHReliableDatagram::sendtoWait(uint8_t * buf, uint8_t len, uint8_t address)

当我使用:

uint8_t timePacket[] = "timen";
sendtoWait(timePacket, sizeof(timePacket), SERVER_ADDRESS)

我在pyserial的readline()函数中得到了一个在另一端(SERVER_ADDRESS)带有"time"的完美字符串,该字符串使用utf-8编码完美解码。

现在我需要使用相同的sendtoWait()函数发送一些字节。我首先定义一个 60 字节的 char 数组

char packetBuff[60] = "";

然后我获取每个字节并将其转换为字符

char value = (char)flash.readByte(dumpCounter++);

然后将每个值放在 char 数组中,如下所示:

packetBuff[charNo] = value;

找到换行符后,我尝试使用sendtoWait()函数再次发送 char 数组:

if (value == 'n') {
Serial.println(packetBuff);
uint8_t buff[charNo];
for (int i = 0; i < charNo; i++) {
buff[i] = packetBuff[i];
}
sendtoWait(buff, charNo, SERVER_ADDRESS))
charNo++;

但是,尽管Serial.println(packetBuff)显示了正确的字符,例如"1559105487"(unix 时间戳),buff数组无法正常工作,并显示随机字符,例如分号、随机个位数等。

如何正确转换 char 数组并使用发送"time"之类的sendtoWait()函数正确发送它?

编辑:完整代码:

int charNo = 0;
char packetBuff[60] = "";
if (dumpCounter != 0) {
dumpCounter--;
}
while(dumpCounter < currentFlashLoc) {
char value = (char)flash.readByte(dumpCounter++);
packetBuff[charNo] = value;
if (value == 'n') {
Serial.println(packetBuff);
uint8_t buff[charNo];
for (int i = 0; i < charNo; i++) {
buff[i] = packetBuff[i];
}
if (manager.sendtoWait(buff, charNo, SERVER_ADDRESS)) {
// packet sent successfully
}
charNo = -1;
}
charNo++;
}

像这样强制转换字符数组:

sendtoWait((uint8_t*)packetBuff, sizeof(packetBuff), SERVER_ADDRESS)

工作正常。buff不是必需的。