Conversion de char en uint8_t
Bonjour à tous,
J'ai un doute concernant cette fonction, sachant que
Code:
_config_radio.deveui;
à la valeur de
Citation:
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
=> 8
et
Code:
_config_radio.nwkskey;
à la valeur de
Citation:
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
=> 16
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
struct Config_radio {
char c_appeui[100]; // FOR OTAA
uint8_t appeui[8]; // FOR OTAA
char c_deveui[100]; // FOR OTAA
uint8_t deveui[8]; // FOR OTAA
char c_appkey[100]; // FOR OTAA
uint8_t appkey[16]; // FOR OTAA
uint32_t devaddr; // FOR ABP
char c_devaddr[11]; // FOR ABP
char c_appskey[100]; // FOR ABP
uint8_t appskey[16]; // FOR ABP
char c_nwkskey[100]; // FOR ABP
uint8_t nwkskey[16]; // FOR ABP
};
Config_radio _config_radio;
charToUint8_t(_config_radio.c_deveui + 1,_config_radio.deveui);
void Foxuino::charToUint8_t(const char * key, uint8_t table[])
{
char * ptr;
char buffer[100];
const char* separateur = ",";
strncpy(buffer, key, 100); // on le duplique pour ne pas toucher à key
buffer[99] = '\0';
ptr = strtok(buffer, separateur); // http://www.cplusplus.com/reference/cstring/strtok/
int i = 0;
while (ptr && i < 16) {
table[i++] = strtol(ptr, NULL, 16); // http://www.cplusplus.com/reference/cstdlib/strtol/
ptr = strtok(NULL, separateur);
}
} |
Le premier questionnement, c'est la taille du buffer. Est-ce necessaire qu'elle soit de 100, alors que la plus grande valeur (taille) est de 16 (ref: nwkskey)
Le deuxième questionnement est la boucle
Code:
1 2 3 4 5
|
while (ptr && i < 16) {
table[i++] = strtol(ptr, NULL, 16); // http://www.cplusplus.com/reference/cstdlib/strtol/
ptr = strtok(NULL, separateur);
} |
Initialement, cette fonction est prévue pour ceci
Code:
1 2
|
charToUint8_t(_config_radio.c_nwkskey + 1,_config_radio.nwkskey); |
sachant _config_radio.c_nwkskey a une taille de 16
Citation:
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
Donc que va-t-il se passer si _config_radio.c_deveui à une taille de 8.
Voyez-vous mon souci? La boucle devrait etre comme ceci
Code:
1 2 3 4 5
|
while (ptr && i < 8) {
table[i++] = strtol(ptr, NULL, 8); // http://www.cplusplus.com/reference/cstdlib/strtol/
ptr = strtok(NULL, separateur);
} |
Mais si je laisse cette dernier avec le numéro 16
Code:
1 2 3 4 5
|
while (ptr && i < 16) {
table[i++] = strtol(ptr, NULL, 16); // http://www.cplusplus.com/reference/cstdlib/strtol/
ptr = strtok(NULL, separateur);
} |
que risque-t-il de se passer après le 9 -> 16 pour
Code:
_config_radio.deveui;
qui a la valeur de
Citation:
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
=> 8
Est-ce que quelque chose vous interpelle?
Merci pour vos lumières