Arduino sscanf 함수

Ammar Ali 2023년3월20일
Arduino sscanf 함수

이 튜토리얼에서는 Arduino의 sscanf() 함수를 사용하여 문자 배열 또는 문자열에서 형식이 지정된 데이터를 읽는 방법에 대해 설명합니다.

Arduino sscanf() 함수

숫자, 기호, 문자 및 기타 데이터를 텍스트 또는 문자열 파일에 저장할 수 있습니다. sscanf() 함수를 사용하여 텍스트, 문자열 또는 문자 배열에서 특정 형식의 데이터를 읽을 수 있습니다.

sscanf() 함수의 기본 구문은 다음과 같습니다.

sscanf(char *data, char *format, ...);

위의 코드에서 data에는 두 번째 인수에 정의된 형식을 사용하여 읽고자 하는 문자열 또는 문자 배열이 포함되어 있습니다. 형식을 정의한 후 형식이 지정된 데이터를 저장하려는 변수의 수를 나열할 수 있습니다.

예를 들어 이벤트 날짜가 포함된 문자열이 있고 날짜, 월, 연도를 구분하여 별도의 변수에 저장하려고 한다고 가정합니다. 아래 코드를 참조하십시오.

char *data = "28 April 2022";
int date = 0;
int year = 0;
char month[10];

void setup() {
  Serial.begin(9600);
  Serial.println(data);
  sscanf(data, "%2d %s %4d", &date, month, &year);
  Serial.println(date);
  Serial.println(month);
  Serial.println(year);
}

void loop() {}

출력:

28 April 2022
28
April
2022

위의 코드에서 주어진 문자열을 저장하기 위해 data 변수를 만들었습니다. date, yearmonth 변수는 일, 연도 및 월 값을 별도로 저장합니다.

month 변수를 크기 10으로 초기화했지만 변수에 저장하려는 주어진 문자열에 따라 크기를 변경할 수 있습니다. Serial.begin() 함수를 사용하여 결과를 표시하는 데 사용할 Arduino의 직렬 모니터를 초기화했습니다.

정수 값을 얻으려면 %d 기호를 사용하고 숫자 2는 읽고자 하는 숫자의 수를 정의합니다. %s 기호를 사용하여 공백까지 문자를 반환하는 문자열을 얻습니다.

주어진 문자열에 공백이 없으면 %c와 숫자를 사용하여 읽고자 하는 문자 수를 지정할 수 있습니다. 예상 결과를 반환하지 않는 공백이 없기 때문에 %s를 사용할 수 없습니다.

포맷 후 결과를 정수로 저장하려면 & 기호를 사용해야 하며 문자열이나 문자 배열의 경우 변수 이름만 사용하면 됩니다. 위의 예에서는 공백을 구분 기호로 사용하여 데이터 형식을 지정했지만 모든 문자, 기호 또는 숫자를 사용할 수도 있습니다.

예를 들어 날짜 문자열 내부의 공백 대신 쉼표가 있는지 생각해 보십시오.

필요한 결과를 추출하려면 공백 대신 sscanf() 함수 내부에 쉼표를 사용해야 합니다. 또한 문자열에 공백이 없기 때문에 %s 기호 대신 %c 기호를 사용해야 합니다.

예를 들어 다른 구분 기호를 사용하여 위의 예를 반복해 보겠습니다. 아래 코드를 참조하십시오.

char *data = "28,April,2022";
int date = 0;
int year = 0;
char month[10];

void setup() {
  Serial.begin(9600);
  Serial.println(data);
  sscanf(data, "%2d,%5c,%4d", &date, month, &year);
  Serial.println(date);
  Serial.println(month);
  Serial.println(year);
}

void loop() {}

출력:

28,April,2022
28
April
2022

위의 코드에서 sscanf() 함수 내부에 %5c 기호를 사용합니다. 5개의 문자만 읽으려고 하기 때문입니다. 5자 이상을 읽으면 다음 출력이 변경됩니다.

보시다시피 출력은 첫 번째 예제의 출력과 동일합니다. 또한 부동 소수점 숫자의 경우 %f, 8진수의 경우 %o, 16진수의 경우 %x, 부호 없는 정수의 경우 %u와 같은 다른 기호를 사용하여 데이터 형식을 지정할 수 있습니다.

작가: 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 Function