I want to convert String to uint16_t for irsend.sendRaw

I want to convert string onn to uint16_t which I am using the rawdata from IR remote and the code like this which I want to use z in the irsend I tried it like this way but didn't work:

uint16_t onn30 [227] = {2980, 1802,  448, 1102,  394, 1134,  418, 408,  418, 410,  418, 434,  392, 1156,  448, 380,  392, 448,  394, 1156,  420, 1130,  394, 410,  418, 1158,  392, 434,  420, 406,  394, 1156,  394, 1172,  448, 356,  416, 1156,  394, 1158,  394, 434,  392, 434,  394, 1158,  392, 434,  394, 450,  392, 1156,  394, 434,  394, 434,  392, 408,  418, 434,  392, 434,  394, 410,  418, 448,  394, 434,  394, 410,  416, 410,  418, 434,  392, 434,  394, 434,  394, 434,  392, 448,  392, 434,  392, 434,  394, 1156,  392, 434,  392, 434,  394, 1158,  392, 434,  394, 448,  394, 1158,  392, 1158,  394, 434,  392, 434,  392, 436,  418, 408,  392, 434,  392, 450,  392, 410,  418, 434,  394, 410,  416, 436,  392, 408,  442, 410,  392, 434,  392, 448,  394, 434,  394, 434,  392, 434,  394, 434,  392, 434,  394, 410,  416, 1134,  416, 448,  394, 434,  392, 436,  392, 434,  392, 434,  394, 410,  416, 434,  392, 434,  420, 422,  392, 434,  392, 434,  394, 434,  394, 434,  394, 432,  418, 408,  394, 434,  394, 426,  416, 434,  418, 384,  418, 434,  394, 434,  392, 434,  418, 384,  416, 434,  394, 448,  394, 434,  394, 432,  394, 434,  394, 434,  392, 434,  394, 410,  444, 408,  394, 448,  394, 434,  418, 410,  392, 1158,  418, 1130,  394, 1158,  394, 1156,  448, 1104,  392, 428,  416};  // UNKNOWN F0A17D53

 uint16_t onn27 [227] = {2980, 1776,  420, 1156,  394, 1158,  392, 434,  396, 408,  418, 432,  394, 1156,  394, 434,  394, 448,  394, 1132,  420, 1134,  416, 434,  448, 1102,  394, 410,  418, 432,  394, 1132,  418, 1170,  394, 432,  394, 1156,  394, 1156,  394, 432,  420, 408,  394, 1156,  420, 408,  394, 448,  448, 1102,  394, 432,  394, 432,  394, 434,  394, 432,  394, 434,  450, 354,  418, 448,  394, 434,  394, 432,  394, 434,  394, 410,  442, 408,  394, 434,  394, 434,  420, 422,  394, 410,  442, 384,  418, 1158,  394, 434,  394, 434,  418, 1108,  418, 434,  394, 448,  394, 1132,  418, 1158,  394, 432,  394, 410,  418, 434,  394, 432,  396, 432,  394, 448,  394, 434,  394, 434,  394, 1158,  392, 434,  392, 434,  394, 434,  418, 384,  418, 448,  394, 434,  392, 434,  394, 410,  418, 434,  446, 356,  418, 434,  418, 1132,  394, 448,  394, 410,  418, 432,  394, 410,  418, 432,  420, 408,  420, 408,  394, 434,  392, 448,  394, 432,  394, 434,  394, 434,  446, 380,  394, 432,  394, 432,  394, 434,  448, 392,  392, 434,  394, 432,  394, 432,  418, 410,  394, 432,  394, 410,  416, 434,  418, 424,  392, 410,  442, 408,  394, 434,  392, 432,  448, 378,  394, 432,  448, 380,  394, 448,  394, 432,  420, 408,  394, 432,  394, 434,  394, 432,  394, 434,  394, 432,  448, 1120,  394};  // UNKNOWN 1794BB83

 
x = "onn";
y = 30;
z = x+y;

 //Serial.println(z); which z should print like onn30 or onn27 depends on the setpoint



 irsend.sendRaw( z, 227, 38);

but gave me error: no matching function for call to 'IRsend::sendRaw(String&, int, int)'

How can i convert "onn" String into uint16 ?

Thanks for all

At run time, variables have addresses, not names. You will not be able to add two values together to construct a name, and have that name directly relate to a memory address where the data is stored.

Why do you think you need to do that? There are almost certainly other ways.

Thanks PaulS for reply :slight_smile:

Actually I have around 30 rawdata for my AC control which i name them like this: onn31, onn30, onn29 and so on for alll rawdata . and I want to create only one irsend.sendRaw(z, 227, 38); which can choose any rawdata upon the setpoint I gave it 31,30,29.... and add it beside onn then will choose the rawdata depends on setpoint.

like this I want it. but irsend.sendRaw(z, 227, 38); only except uint16 not normal string! thats why I am thinking to convert it to uint16

Any Idea for this :slight_smile:

You can make a 2D array, of type uint16_t. Then, to send one IR code, you just need to specify the array index to use.

I did like this :

String onn = "onn";
 uint16_t x = strtoul(&(onn.c_str()[3]), NULL, 0);
 uint16_t y;
 uint16_t z;
 y = setpoint2;
 z = x+y;
                     
irsend.sendRaw(z, 227, 38);

but gave me this error : invalid conversion from 'uint16_t {aka short unsigned int}' to 'uint16_t* {aka short unsigned int*}' [-fpermissive]

PaulS:
You can make a 2D array, of type uint16_t. Then, to send one IR code, you just need to specify the array index to use.

Any example which can help me to get the idea :slight_smile:

Study arrays :wink: And forget about names. You can’t build a name and pretend it’s the name of a variable.

uint16_t onn [][227] = 
{
{2980, 1802,  448, 1102,  394, 1134,  418, 408,  418, 410,  418, 434,  392, 1156,  448, 380,  392, 448,  394, 1156,  420, 1130,  394, 410,  418, 1158,  392, 434,  420, 406,  394, 1156,  394, 1172,  448, 356,  416, 1156,  394, 1158,  394, 434,  392, 434,  394, 1158,  392, 434,  394, 450,  392, 1156,  394, 434,  394, 434,  392, 408,  418, 434,  392, 434,  394, 410,  418, 448,  394, 434,  394, 410,  416, 410,  418, 434,  392, 434,  394, 434,  394, 434,  392, 448,  392, 434,  392, 434,  394, 1156,  392, 434,  392, 434,  394, 1158,  392, 434,  394, 448,  394, 1158,  392, 1158,  394, 434,  392, 434,  392, 436,  418, 408,  392, 434,  392, 450,  392, 410,  418, 434,  394, 410,  416, 436,  392, 408,  442, 410,  392, 434,  392, 448,  394, 434,  394, 434,  392, 434,  394, 434,  392, 434,  394, 410,  416, 1134,  416, 448,  394, 434,  392, 436,  392, 434,  392, 434,  394, 410,  416, 434,  392, 434,  420, 422,  392, 434,  392, 434,  394, 434,  394, 434,  394, 432,  418, 408,  394, 434,  394, 426,  416, 434,  418, 384,  418, 434,  394, 434,  392, 434,  418, 384,  416, 434,  394, 448,  394, 434,  394, 432,  394, 434,  394, 434,  392, 434,  394, 410,  444, 408,  394, 448,  394, 434,  418, 410,  392, 1158,  418, 1130,  394, 1158,  394, 1156,  448, 1104,  392, 428,  416},  // UNKNOWN F0A17D53
{2980, 1776,  420, 1156,  394, 1158,  392, 434,  396, 408,  418, 432,  394, 1156,  394, 434,  394, 448,  394, 1132,  420, 1134,  416, 434,  448, 1102,  394, 410,  418, 432,  394, 1132,  418, 1170,  394, 432,  394, 1156,  394, 1156,  394, 432,  420, 408,  394, 1156,  420, 408,  394, 448,  448, 1102,  394, 432,  394, 432,  394, 434,  394, 432,  394, 434,  450, 354,  418, 448,  394, 434,  394, 432,  394, 434,  394, 410,  442, 408,  394, 434,  394, 434,  420, 422,  394, 410,  442, 384,  418, 1158,  394, 434,  394, 434,  418, 1108,  418, 434,  394, 448,  394, 1132,  418, 1158,  394, 432,  394, 410,  418, 434,  394, 432,  396, 432,  394, 448,  394, 434,  394, 434,  394, 1158,  392, 434,  392, 434,  394, 434,  418, 384,  418, 448,  394, 434,  392, 434,  394, 410,  418, 434,  446, 356,  418, 434,  418, 1132,  394, 448,  394, 410,  418, 432,  394, 410,  418, 432,  420, 408,  420, 408,  394, 434,  392, 448,  394, 432,  394, 434,  394, 434,  446, 380,  394, 432,  394, 432,  394, 434,  448, 392,  392, 434,  394, 432,  394, 432,  418, 410,  394, 432,  394, 410,  416, 434,  418, 424,  392, 410,  442, 408,  394, 434,  392, 432,  448, 378,  394, 432,  448, 380,  394, 448,  394, 432,  420, 408,  394, 432,  394, 434,  394, 432,  394, 434,  394, 432,  448, 1120,  394}
};  // UNKNOWN 1794BB83

Now you can basically use onn[0] and onn[1]. If you want to use 27 and 30, you need some intelligence to convert 30 to 0 and 27 to 1.

onn.c_str()[3]

The length of the array that c_str() returns is 4. The element at position 3 is a NULL. Converting a NULL string to a number is not meaningful.

 uint16_t x = strtoul(&(onn.c_str()[3]), NULL, 0);

Even if the first argument WAS a string representing a numeric value, converting the string to an unsigned int in base 0 makes no sense.

sterretje:
Study arrays :wink: And forget about names. You can’t build a name and pretend it’s the name of a variable.

uint16_t onn [][227] = 

{
{2980, 1802,  448, 1102,  394, 1134,  418, 408,  418, 410,  418, 434,  392, 1156,  448, 380,  392, 448,  394, 1156,  420, 1130,  394, 410,  418, 1158,  392, 434,  420, 406,  394, 1156,  394, 1172,  448, 356,  416, 1156,  394, 1158,  394, 434,  392, 434,  394, 1158,  392, 434,  394, 450,  392, 1156,  394, 434,  394, 434,  392, 408,  418, 434,  392, 434,  394, 410,  418, 448,  394, 434,  394, 410,  416, 410,  418, 434,  392, 434,  394, 434,  394, 434,  392, 448,  392, 434,  392, 434,  394, 1156,  392, 434,  392, 434,  394, 1158,  392, 434,  394, 448,  394, 1158,  392, 1158,  394, 434,  392, 434,  392, 436,  418, 408,  392, 434,  392, 450,  392, 410,  418, 434,  394, 410,  416, 436,  392, 408,  442, 410,  392, 434,  392, 448,  394, 434,  394, 434,  392, 434,  394, 434,  392, 434,  394, 410,  416, 1134,  416, 448,  394, 434,  392, 436,  392, 434,  392, 434,  394, 410,  416, 434,  392, 434,  420, 422,  392, 434,  392, 434,  394, 434,  394, 434,  394, 432,  418, 408,  394, 434,  394, 426,  416, 434,  418, 384,  418, 434,  394, 434,  392, 434,  418, 384,  416, 434,  394, 448,  394, 434,  394, 432,  394, 434,  394, 434,  392, 434,  394, 410,  444, 408,  394, 448,  394, 434,  418, 410,  392, 1158,  418, 1130,  394, 1158,  394, 1156,  448, 1104,  392, 428,  416},  // UNKNOWN F0A17D53
{2980, 1776,  420, 1156,  394, 1158,  392, 434,  396, 408,  418, 432,  394, 1156,  394, 434,  394, 448,  394, 1132,  420, 1134,  416, 434,  448, 1102,  394, 410,  418, 432,  394, 1132,  418, 1170,  394, 432,  394, 1156,  394, 1156,  394, 432,  420, 408,  394, 1156,  420, 408,  394, 448,  448, 1102,  394, 432,  394, 432,  394, 434,  394, 432,  394, 434,  450, 354,  418, 448,  394, 434,  394, 432,  394, 434,  394, 410,  442, 408,  394, 434,  394, 434,  420, 422,  394, 410,  442, 384,  418, 1158,  394, 434,  394, 434,  418, 1108,  418, 434,  394, 448,  394, 1132,  418, 1158,  394, 432,  394, 410,  418, 434,  394, 432,  396, 432,  394, 448,  394, 434,  394, 434,  394, 1158,  392, 434,  392, 434,  394, 434,  418, 384,  418, 448,  394, 434,  392, 434,  394, 410,  418, 434,  446, 356,  418, 434,  418, 1132,  394, 448,  394, 410,  418, 432,  394, 410,  418, 432,  420, 408,  420, 408,  394, 434,  392, 448,  394, 432,  394, 434,  394, 434,  446, 380,  394, 432,  394, 432,  394, 434,  448, 392,  392, 434,  394, 432,  394, 432,  418, 410,  394, 432,  394, 410,  416, 434,  418, 424,  392, 410,  442, 408,  394, 434,  392, 432,  448, 378,  394, 432,  448, 380,  394, 448,  394, 432,  420, 408,  394, 432,  394, 434,  394, 432,  394, 434,  394, 432,  448, 1120,  394}
};  // UNKNOWN 1794BB83



Now you can basically use onn[0] and onn[1]. If you want to use 27 and 30, you need some intelligence to convert 30 to 0 and 27 to 1.

yes this is a good way but in this way I want a way to convert 30 to 0 and 27 to 1!

PaulS:

 uint16_t x = strtoul(&(onn.c_str()[3]), NULL, 0);

converting the string to an unsigned int in base 0 makes no sense.

The conversion is to an unsigned long mismatching the target int in probably two aspects.
Zero for the base in strtoul means unspecified, allowing 0x 0b 07 defaulting to decimal.