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
데이터 유형으로 정의했습니다.