Arduino memset() 函数

Ammar Ali 2023年10月12日
Arduino memset() 函数

本教程将讨论使用 Arduino 中的 memset() 函数将值的字节设置为目标。

Arduino 中的 memset() 函数

memset() 函数将值的字节设置为 Arduino 中的目标。该函数从给定值中获取特定数量的字节并将其存储在目标中。

语法:

memset(destination, value, N_bytes);

在上述语法中,memset() 函数将获取给定值的第一个 N_bytes 并将其存储在 destination 中。如果值是整数或任何其他数据类型,它将被转换为字节数据类型。

我们将创建一个整数数组并使用 memset() 函数更改其值。

代码:

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

输出:

514
514
514
514

我们定义了一个整数数组并使用 memset() 函数将所有四个元素替换为整数 2 的字节。我们使用循环在 Arduino IDE 的串行监视器窗口上打印数组的值。

我们还可以使用 int() 函数将字节值转换为整数。我们必须将每个数组值存储到一个字节变量中,然后将其传递给 int() 函数以将其转换为整数。

让我们将上面的数组值转换为整数。

代码:

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

输出:

2
2
2
2

字节值已转换为整数,但它们并未存储在原始数组中。我们也可以使用 memset() 函数对字符串和字符执行相同的操作。

我们可以定义一个字符数组,并使用 memset() 函数将它们替换为另一个字符。

使用 memset() 函数后,我们将获得一个包含字符的字节值的数组,但我们可以使用 char() 函数将该值转换回字符。

我们必须将每个字节值存储在一个字节变量中,然后将其传递给 char() 函数以将其转换为字符。让我们定义一个整数数组,存储字符值,然后用另一个替换它们。

代码:

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

输出:

.
.
.
.

在第三个参数中,我们相乘的整数定义了我们要在数组中替换的值的数量。如果我们不想替换所有值而只想替换数组中的一些值,我们必须在 memset() 函数的第一个参数中添加一个整数。

假设我们只想替换给定数组的第二个和第三个值。我们必须在第一个参数中添加 1,并在第三个参数中将其乘以 2

代码:

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

输出:

a
.
.
d

仅替换数组的中间元素。我们还可以使用循环将值存储在数组中。

在下面的示例中,让我们使用 Arduino 中的循环来执行上述操作。

代码:

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

输出:

a
.
.
d

在上面的代码中,我们将数组定义为 char 数据类型,使用循环替换元素,并使用另一个循环打印数组元素。如果我们使用 int 来声明给定的数组,字符将被转换为 ASCII 表示。

我们必须使用循环来打印数组的值,但是在字符串的情况下我们可以不使用循环来打印它。我们可以使用循环替换字符串中存在的字符。

我们必须使用索引获取要替换的字符,然后使用另一个字符替换它们。让我们定义一个字符串并用另一个替换它的一些字符。

代码:

String ch1 = "hello world";

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

输出:

h.... world

给定字符串的某些字符被另一个字符替换。在 memset() 函数的情况下,我们使用 int 数据类型定义给定数组,因为该函数不适用于其他数据类型数组。

作者: 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

相关文章 - Arduino Array