Función Arduino memset()

Ammar Ali 12 octubre 2023
Función Arduino memset()

Este tutorial discutirá la configuración de los bytes de un valor en el destino utilizando la función memset() en Arduino.

la función memset() en Arduino

La función memset() asigna los bytes de un valor al destino en Arduino. La función toma un número específico de bytes de un valor dado y lo almacena en el destino.

Sintaxis:

memset(destination, value, N_bytes);

En la sintaxis anterior, la función memset() tomará los primeros N_bytes del valor dado y los almacenará dentro del destino. Si el valor es un número entero o cualquier otro tipo de datos, se convertirá al tipo de datos de bytes.

Crearemos un array de enteros y cambiaremos sus valores usando la función memset().

Código:

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() {}

Producción :

514
514
514
514

Definimos un array de enteros y usamos la función memset() para reemplazar los cuatro elementos con los bytes del entero 2. Usamos un bucle para imprimir los valores del array en la ventana del monitor en serie de Arduino IDE.

También podemos convertir los valores de byte a un número entero usando la función int(). Debemos almacenar cada valor de matriz en una variable de byte y luego pasarlo dentro de la función int() para convertirlo en un número entero.

Convirtamos el valor del array anterior en un número entero.

Código:

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() {}

Producción :

2
2
2
2

El valor del byte se ha convertido en números enteros, pero no se almacenan dentro del array original. También podemos hacer la misma operación con cadenas y caracteres usando la función memset().

Podemos definir un array de caracteres y reemplazarlos con otro carácter utilizando la función memset().

Después de usar la función memset(), obtendremos un array que contendrá el valor en bytes de los caracteres, pero podemos volver a convertir el valor en un carácter usando la función char().

Debemos almacenar cada valor de byte en una variable de byte y luego pasarlo dentro de la función char() para convertirlo en un carácter. Definamos un array de enteros, almacenemos valores de caracteres y luego reemplácelos con otro.

Código:

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() {}

Producción :

.
.
.
.

En el tercer argumento, el número entero que multiplicamos define la cantidad de valores que queremos reemplazar dentro del array. Si no queremos reemplazar todos los valores y queremos reemplazar solo algunos valores del arreglo, debemos agregar un número entero en el primer argumento de la función memset().

Supongamos que solo queremos reemplazar el segundo y tercer valor del array dada. Debemos sumar 1 en el primer argumento y multiplicarlo por 2 en el tercer argumento.

Código:

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() {}

Producción :

a
.
.
d

Solo se reemplazan los elementos intermedios del array. También podemos almacenar valores dentro de un array usando un bucle.

En el siguiente ejemplo, hagamos la operación anterior usando un bucle en Arduino.

Código:

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() {}

Producción :

a
.
.
d

En el código anterior, definimos el array como un tipo de datos char, usamos un bucle para reemplazar los elementos y usamos otro bucle para imprimir los elementos del array. Si usamos int para declarar el array dada, los caracteres se convertirán en representación ASCII.

Tenemos que usar un bucle para imprimir los valores de un array, pero podemos imprimirlo sin un bucle en el caso de una cadena. Podemos reemplazar los caracteres presentes en una cadena usando un bucle.

Tenemos que obtener los caracteres que queremos reemplazar usando su índice y luego reemplazarlos usando otro carácter. Definamos una cadena y reemplacemos algunos de sus caracteres con otros.

Código:

String ch1 = "hello world";

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

Producción :

h.... world

Algunos caracteres de la cadena dada se reemplazan con otro carácter. En el caso de la función memset(), definimos el array dada con el tipo de datos int porque la función no funciona con arrays de otro tipo de datos.

Autor: 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

Artículo relacionado - Arduino Array