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