본문 바로가기
반응형

IT 톺아보기/이런저런 공부19

memcpy 사용법 목차 memcpy()란? memcpy() 사용 예시 memcpy가 작동 안하는 경우 memcpy()란? memcpy() 는 “string.h”에 정의되어 있는 기능으로, 원하는 크기만큼 값을 다른 변수에 복사할 수 있는 함수이다. #include void* memcpy(void* dest, const void* src, sizr_t count); 로 되어있고 내부에는 총 3개의 인자를 할당받는다. 할당 받는 각 인자는 아래와 같다. `dest`는 우리가 복사를 받을 ptr이다. `src`는 우리가 복사를 하려고 하는 ptr이다. `count`는 복사할 인자의 크기이다. 쉽게 말해, src 에 저장되어 있는 값을 dest 에 복사하는데, count 크기만큼만 복사하는 것이다. 여기서 char 값을 복사한다.. 2023. 4. 18.
CAN 통신 CAN 통신 CAN 통신이란? Controller Area Network의 약자로, 이는 마이크로컨트롤러와 장비 간 통신이 어떠한 주 컴퓨터 없이 가능하도록 설계되어있다. 해당 프로토콜을 보쉬사에서 1986년에 처음 제안하고 개발됐다. 다른 통신과의 차이점은 버스 타입의 브로드캐스트 형식이라는 것이다. 여기서, 브로드캐스트 형식이라는 것은 정보를 모든 노드에 전달한다는 것이다. 정보를 받는 노드들은 센서가 될 수도 있고 마이크로컨트롤러 혹은 게이트웨이(이더넷이나 USB 케이블을 통해 외부 네트워크와 통신하는 할 수 있는)가 될 수 있다. CAN은 메시지 기반 프로토콜로서, 메시지는 메시지 식별자를 포함하고 이를 통해 우선순위를 결정한다. CAN 네트워크에서는 노드 식별을 할 필요는 없지만, 이것을 네트워.. 2023. 4. 17.
멀티 프로세스(Multi Process)란? 멀티 프로세스 두개 이상의 프로세서가 협력적으로 하나 이상의 작업을 동시에 처리하는 것 -> 병렬처리, 각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 경우 사용 메모리 독립적 장점 독립된 구조로 안전성이 높음 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향을 주지 않아, 전체 프로세스가 정지되거나 하는 문제가 발생하지 않음 여러 개의 프로세스가 처리되어야 할 때 동일한 데이터를 사용하고, 이러한 데이터를 하나의 디스크에 두소 모든 프로세서가 이를 공유하면 비용적으로 저렴 문제점 독립된 메모리 영역이기 떄문에 작업량이 많을수록 오버헤드가 발생하여 성능저하가 발생할 수 있음 [Context Switching](Context Switching) 과정에서 Cache 메모리 초기화.. 2023. 2. 1.
한글 오토마타 만들기 - 3 문자열 변환하기 문자열을 변환하는 작업은 한글로 변환하면서 해당 문자가 초성인지, 중성인지, 종성인지 판단하는 것도 중요하다. 이를 구분하기 위해 5가지로 분류할 수 있는데, 자음만 있는 경우 -> c 초성인 경우 -> l 모음인 경우 -> v 종성인 경우 -> t 로 지정해주고 나머지는 그대로 값을 넣어준다. def MakeHangeul(words: str) -> str: # ----- 중략 ----- # 입력 받은 값을 저장하고 단어 조합하기 위한 값을 저장하는 변수 result, result_state = "", [] idx, n = 0, len(words) # 입력 받은 것을 index에 따라 저장을 # 초성: l, 모음: v, 종성: t, 자음만: c 로 분류하며 저장 while idx < n:.. 2023. 1. 18.
한글 오토마타 만들기 - 2 한글 변환 위한 준비 작업 이제 받아온 문자열에서 영어를 키보드의 한글과 mapping하여 "ㅎㅏㄴㄱㅡㄹ" 같이 만드는 작업을 진행할 것이다. 여기서, 변환 작업을 진행하기 위해서는 키보드 자판의 영어들이 한글의 어떠한 것과 매칭되어 있는지 잘 파악하고 작업을 진행해야 한다. 예시로 "a"는 "ㅁ"과 매칭되어 있으니 "a": 0x3141("ㅁ"의 아스키코드)로 하는 dictionary를 만들어 준다. keyval = { "A": 0, "B": 0, "C": 0, "D": 0, "E": 0x3138, "F": 0, "G": 0, "H": 0, "I": 0, "J": 0, "K": 0, "L": 0, "M": 0, "N": 0, "O": 0x3152, "P": 0x3156, "Q": 0x3143, "R": .. 2023. 1. 18.
한글 오토마타 만들기 - 1 오토마타란? 오토마타는 이산 시간 동안 주어진 입력에 의존해 작동하는 수학적인 기계이다. 기계는 일정 주기마다 입력을 하나씩 받는데, 이를 기호 또는 문자라고 한다. 기계가 입력받는 문자는 정해진 집합의 한 원소여야 하며, 이를 알파벳이라 한다. 기계가 입력받는 일련의 기호와 문자를 문자열이라 한다. 기계는 유한한 상태의 집합을 갖고 있으며, 입력에 따라 현재 상태에서 정해진 다음 상태로 전이한다. 현재 상태와 입력, 다음 상태는 수학적으로 함수 또는 관계로 주어진다. 이를 전이 함수 또는 전이 관계라 한다. 기계는 입력의 끝을 만나거나 특정 상태에 있을 때 정지할 수 있다. 기계는 정지했을 때 문자열을 수용하거나 거부한다. (출처: 위키백과 - 오토마타 이론) 위 설명대로 오토마타 이론은 활용하여 입력.. 2023. 1. 18.
인코딩이란 - 2. base64 Encoding / Decoding 이번에 진행한 base64 인코딩/디코딩은 UTF-8을 기준으로 진행했다. Encoding은 일상 언어를 bits로 변환하는 작업이고, Decoding을 해당 bits를 적절한 언어로 변환하는 작업이다. 기본적으로 문자는 8bits로 이루어져 있고 이를 Encoding을 진행하는 경우, 입력받은 문자를 8bits로 만들고 6bits로 나누어 변환을 진행. Man을 예시로 Encoding을 진행하면, 위 그림처럼 작성이 되고 남는 구간은 0으로 채워 넣는다. 그리고 000000의 문자는 "="으로 padding. Decoding은 위 작업을 반대로 진행하면 된다. Encoding / Decoding 시에는 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012.. 2023. 1. 18.
인코딩이란? - 1 컴퓨터가 발명되고 긴 시간 동안 발전하면서 언어를 컴퓨터로 처리하는 방식이 필요했었다. 우리 일상의 언어를 처리하기 위한 연구가 서양권에서 먼저 시작이 되면서 알파벳 처리에 대한 연구가 가장 먼저 시작이 됨. 이후 세계적으로 컴퓨터 시장이 커지게 되면서 다른 국가의 언어도 처리할 필요가 느껴지면서 끊임없이 연구가 진행이 되어왔다. 영어의 문자 집합과 인코딩 최초의 컴퓨터인 에니악이 만들어진 이루 약 15년이 지나서야 문자 집합이라는 개념이 생김. 시초는 아스키(ASCII)인데 이는 0x00 ~ 0x7F까지 총 127개 문자로 이루어져있음. 이는 영어를 표현하는 데 있어 큰 문제가 없었지만, 유럽 언어를 표현하는데 사용할 수 없었다. 이러한 문제를 해결하기 위해 ASCII를 제정하여 기존 127개에서 0x.. 2023. 1. 17.
플로이드-와샬 알고리즘 해당 알고리즘은 그래프 이론에서 착안된 이론 중 하나로써 반의 가중치가 양수 뿐만 아니라 음수인 경우의 가중치를 가지는 이동 경로에서도 사용할 수 있어 이를 통해 최단 경로를 찾는 알고리즘이다. ​ 플로이드-와샬 알고리즘 자체는 경로를 반환하지 않지만 약간의 수정 작업을 거친다면 경로까지 반환할 수 있는 알고리즘을 만들 수 있다. ​ 해당 알고리즘 같은 경우는 각 꼭지점 쌍을 지나는 그래프의 모든 경로를 비교하기 때문에 3개의 중첩 for문이 사용된다. -> 이 때문에 시간복잡도가 O(n^3)이다. ​ 기본적으로 ShortPath{최단거리}(I, J, 0) = w(i, j) 이고, 이를 재귀적으로 이용할 경우, ShortPath(i,. J, k) = mininum(ShortPath(i, J, k - 1).. 2022. 8. 9.
반응형