Fonction Arduino memset()

Ammar Ali 12 octobre 2023
Fonction Arduino memset()

Ce tutoriel discutera de la définition des octets d’une valeur vers la destination à l’aide de la fonction memset() dans Arduino.

la fonction memset() dans Arduino

La fonction memset() définit les octets d’une valeur vers la destination dans Arduino. La fonction prend un nombre spécifique d’octets à partir d’une valeur donnée et le stocke dans la destination.

Syntaxe:

memset(destination, value, N_bytes);

Dans la syntaxe ci-dessus, la fonction memset() prendra les premiers N_octets de la valeur donnée et les stockera dans la destination. Si la valeur est un entier ou tout autre type de données, elle sera convertie en type de données byte.

Nous allons créer un tableau d’entiers et modifier ses valeurs à l’aide de la fonction memset().

Code:

int ch1[4] = {1, 2, 3, 4};

void setup() {
  Serial.begin(9600);
  memset(ch1, 2, 4 * sizeof(ch1[1]));
  for (int i = 0; i < 4; i++) {
    Serial.println(ch1[i]);
  }
}
void loop() {}

Production:

514 514 514 514

Nous avons défini un tableau d’entiers et utilisé la fonction memset() pour remplacer les quatre éléments par les octets de l’entier 2. Nous avons utilisé une boucle pour imprimer les valeurs du tableau sur la fenêtre du moniteur série de l’IDE Arduino.

Nous pouvons également convertir les valeurs d’octets en un entier en utilisant la fonction int(). Nous devons stocker chaque valeur de tableau dans une variable d’octet, puis la passer à l’intérieur de la fonction int() pour la convertir en entier.

Convertissons la valeur du tableau ci-dessus en entier.

Code:

int ch1[4] = {1, 2, 3, 4};

void setup() {
  Serial.begin(9600);
  memset(ch1, 2, 4 * sizeof(ch1[1]));
  for (int i = 0; i < 4; i++) {
    byte b = ch1[i];
    int c = int(b);
    Serial.println(c);
  }
}
void loop() {}

Production:

2 2 2 2

La valeur d’octet a été convertie en nombres entiers, mais ils ne sont pas stockés dans le tableau d’origine. On peut aussi faire la même opération avec des chaînes et des caractères en utilisant la fonction memset().

Nous pouvons définir un tableau de caractères et les remplacer par un autre caractère en utilisant la fonction memset().

Après avoir utilisé la fonction memset(), nous obtiendrons un tableau qui contiendra la valeur en octets des caractères, mais nous pouvons reconvertir la valeur en caractère à l’aide de la fonction char().

Nous devons stocker chaque valeur d’octet dans une variable d’octet puis la passer à l’intérieur de la fonction char() pour la convertir en caractère. Définissons un tableau d’entiers, stockons les valeurs des caractères, puis remplaçons-les par un autre.

Code:

int ch1[4] = {'a', 'b', 'c', 'd'};

void setup() {
  Serial.begin(9600);
  memset(ch1, '.', 4 * sizeof(ch1[1]));
  for (int i = 0; i < 4; i++) {
    byte b = ch1[i];
    char c = char(b);
    Serial.println(c);
  }
}
void loop() {}

Production:

....

Dans le troisième argument, l’entier que nous multiplions définit le nombre de valeurs que nous voulons remplacer à l’intérieur du tableau. Si on ne veut pas remplacer toutes les valeurs et qu’on ne veut remplacer que certaines valeurs du tableau, il faut ajouter un entier dans le premier argument de la fonction memset().

Supposons que nous voulions uniquement remplacer les deuxième et troisième valeurs du tableau donné. Il faut ajouter 1 dans le premier argument et le multiplier par 2 dans le troisième argument.

Code:

int ch1[4] = {'a', 'b', 'c', 'd'};

void setup() {
  Serial.begin(9600);
  memset(ch1 + 1, '.', 2 * sizeof(ch1[1]));
  for (int i = 0; i < 4; i++) {
    byte b = ch1[i];
    char c = char(b);
    Serial.println(c);
  }
}
void loop() {}

Production:

a..d

Seuls les éléments du milieu du tableau sont remplacés. Nous pouvons également stocker des valeurs dans un tableau à l’aide d’une boucle.

Dans l’exemple suivant, effectuons l’opération ci-dessus en utilisant une boucle dans Arduino.

Code:

char ch1[4] = {'a', 'b', 'c', 'd'};

void setup() {
  Serial.begin(9600);
  for (int i = 1; i < 3; i++) {
    ch1[i] = '.';
  }
  for (int i = 0; i < 4; i++) {
    Serial.println(ch1[i]);
  }
}
void loop() {}

Production:

a..d

Dans le code ci-dessus, nous avons défini le tableau comme un type de données char, utilisé une boucle pour remplacer les éléments et utilisé une autre boucle pour imprimer les éléments du tableau. Si nous utilisons int pour déclarer le tableau donné, les caractères seront convertis en représentation ASCII.

Nous devons utiliser une boucle pour imprimer les valeurs d’un tableau, mais nous pouvons l’imprimer sans boucle dans le cas d’une chaîne. Nous pouvons remplacer les caractères présents dans une chaîne à l’aide d’une boucle.

Nous devons obtenir les caractères que nous voulons remplacer en utilisant leur index, puis les remplacer en utilisant un autre caractère. Définissons une chaîne et remplaçons certains de ses caractères par un autre.

Code:

String ch1 = "hello world";

void setup() {
  Serial.begin(9600);
  for (int i = 1; i < 5; i++) {
    ch1[i] = '.';
  }
  Serial.println(ch1);
}
void loop() {}

Production:

h....world

Certains caractères de la chaîne donnée sont remplacés par un autre caractère. Dans le cas de la fonction memset(), nous avons défini le tableau donné avec le type de données int car la fonction ne fonctionne pas avec d’autres tableaux de types de données.

Auteur: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

Article connexe - Arduino Array