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