在 C 中将 char* 数据转换为 uint16_t* 或 uint16_t 数组

Convert char* data to uint16_t* or uint16_t array in C

我的 Arduino 程序收到一条 char* 文本消息,如下所示:

char* messageFromWebSocket = "4692\n4408\n656\n358\n662\n356\n658\n376\n656\n358\n662\n1394\n660\n1392\n636\n378\n632\n382\n638\n1418";

现在,我使用的 IRremoteESP8266 库使用此数据通过 sendRaw() 函数控制红外 LED,但采用 uint16_t 形式。示例:

uint16_t rawData[39] = {9064, 4408, 580, 4408,  580,  2152, 578, 2150,
                          580,  4408, 580, 30622, 9066, 2148, 580};
irsend.sendRaw(rawData, 39, 39);

有什么方法可以将我的 char* 转换为 uint16_t 吗?

我有:

char* messageFromWebSocket = "4692\n4408\n656\n358\n662\n356\n658\n376\n656\n358\n662\n1394\n660\n1392\n636\n378\n632\n382\n638\n1418";

我要得到:

uint16_t* rawData = {4692, 4408,  656, 358,  662, 356,  658, 376,  656, 358,  662, 1394,  660, 1392,  636, 378,  632, 382,  638, 1418};

rawData的大小会根据messageFromWebSocket的不同而不同,因为每次程序通过的时候,那里的数据都不一样。预先感谢您的帮助,因为我不知道如何解决这个问题。

下面我展示了我是如何进行转换的:

#define LENGTH 200
uint16_t rawData[LENGTH];

void parseCharToUint16WithIrSend(char* textData){
    Serial.printf("Parsing '%s':\n", textData);
    char *end;
    int sizeArray = 0;

    for (unsigned long i = strtoul(textData, &end, 10);
         textData != end;
         i = strtoul(textData, &end, 10))
    {
        textData = end;
        rawData[sizeArray] = i;
        Serial.printf("Value = %d\n", rawData[sizeArray]);
        sizeArray++;
    }
    
    printf("Actual array data size: %d\n", sizeArray);
    irsend.sendRaw(rawData,sizeArray,38); // here in rawData we have converted all values from char* to uint16_t
    Serial.println("=> DATA WAS SEND BY IR LED");
    
    sizeArray=0; // set index to 0
    memset(rawData, 0, LENGTH); // clear array
}

(我想这可能不是最好的解决方案,但它确实有效)