在 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
}
(我想这可能不是最好的解决方案,但它确实有效)
我的 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
}
(我想这可能不是最好的解决方案,但它确实有效)