프로그래밍 언어 73

C언어로 배열에있는 값을 대문자or소문자로 치환하기

안녕하세요. 오늘은 배열에 있는 값을 대문자or소문자로 치환해보는 함수를 만들어보겠습니다 먼저 알아야 할 내용은 아스키코드에있는 a~z, A~Z값입니다 a~z는 97~122이고 A~Z는 65~98입니다 각 문자의 차이는 32가 납니다 그래서 A에 32를 더하면 97이고 a입니다 이러한 방식으로 함수를 만들면 됩니다 #include void stringToUpper(char *str) { char s; int i; for(i=0; i='a')&&(s

Win32 파일입출력

안녕하세요. 오늘은 Win32로 파일입출력을 해보겠습니다 파일입출력을 할때 함수 4개만 사용하면 됩니다. 파일을 프로그램과 연결하는 CreateFile, 파일을 읽는 ReadFile, 파일을 쓰는 WriteFile, 파일을 닫는 CloseHandle 이렇게 4가지입니다. * CreateFile 함수 HANDLE CreateFile( [in] LPCSTR lpFileName, [in] DWORD dwDesiredAccess, [in] DWORD dwShareMode, [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes, [in] DWORD dwCreationDisposition, [in] DWORD dwFlagsAndAttributes, [in, opti..

Win32 문자집합 설정

안녕하세요. 오늘은 Win32 유니코드에 대해 알아보겠습니다 문자열을 저장할때 일반적으로 char s[] = "wowon"을 저장하면 아래처럼 공간이 할당됩니다 1바이트에 영문자 1개가 저장됩니다. 한글을 저장할때 2byte를 사용하고 영문자를 저장할때 1byte가 저장된다고 해보겠습니다(UTF-16) 두가지 방식으로 "원원 won"을 저장해보겠습니다 멀티 바이트 문자 집합(MBCS) 한글은 2byte, 영문자는 1byte로 저장됩니다 유니코드 문자 집합 한글이던 영문자던 2byte로 저장됩니다. c언어에서 유니코드를 위한 자료형이 있습니다. wchar_t이고 크기는 2바이트입니다. 멀티 바이트의 장점은 낭비되는 공간이 없습니다. 단점은 글자의 개수와 공간의 크기가 일치하지 않는 것입니다. 유니코드의 장..

테라텀(Tera term) 매크로 알아보기

안녕하세요 오늘은 테라텀(Tera term) 매크로에 대해 알아보겠습니다. 시리얼통신을 사용할때 매크로를 사용하면 손쉽게 커맨드를 전달할 수도있고 맞나 판단 할 수도있습니다. 테라텀의 매크로는 TTL 확장자를 사용하고 Tera Term Language의 줄임말입니다. 테라텀에서 하는 명령어 입력/출력/판단을 자동으로 매크로를 만들어서 사용할 수 있습니다. 테라텀 매크로의 커맨드들은 아래의 사이트에 자세히 나와있습니다. 커맨드들 중에서 자주 사용하는 커맨드를 알아보겠습니다. 자세한 사항과 다른 기능들은 아래의 사이트에서 찾아서 사용하면 됩니다. https://ttssh2.osdn.jp/manual/4/en/macro/command/ UART로 테스트하고 RX랑 TX를 연결해서 보내고 바로 받게 했습니다. ..

C# 스레드 사용하기

안녕하세요. 오늘은 C# 윈폼환경에서 스레드를 사용해보겠습니다. 가장많이 스레드를 쓰는 이유는 메인스레드에서 UI를 변경할경우 렉이 걸리게되는데 그때 스레드를 사용합니다 위의 동영상처럼 버튼을 클릭하면 숫자가 1씩 올라가고 버튼을 클릭하면 숫자가 멈추는 프로그램을 해볼겁니다 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 public partial class Form1 : Form { Thread th; int num=0; bool flag = false; public Form1() { InitializeComponent(); } private ..

어셈블리언어 변수선언하기

안녕하세요 . 오늘은 어셈블리언어 변수선언을 해보겠습니다 변수선언은 section .bss와 section .data에 합니다 section .bss 초기화하지 않은 변수를 선언합니다. 변수를 선언할때 변수의 크기를 넣어줘야합니다. resb 1byte resw 2byte resd 4byte resq 8byte resb(Reserve Byte) resw(Reserve Word) resd(Reserve Doubleword) resq(Reserve Quadword) 선언은 「변수명 크기 개수」순서로 하면 됩니다. 1 2 3 section .bss i resb 1 ; 크기가 1byte이고 변수명이 i이고 1개 선언 j resw 2 ; 크기가 2byte이고 변수명이 j이고 2개 선언 cs section. data..

어셈블리언어로 HELLO WORLD 출력하기

어셈블리언어로 HELLO WORLD 출력해보겠습니다 사용할 컴파일러는 SASM입니다. 설치를 하고 Settings옵션에 들어가서 아래처럼 설정합니다 NASM은 리눅스, MAC, 윈도우에서 지원하는 무료 어셈블러입니다. 세팅을 하고 새 프로젝트를 만듭니다 1 2 3 4 5 6 7 8 9 10 11 12 %include "io64.inc" section .text global CMAIN CMAIN: ;write your code here xor rax, rax ret Colored by Color Scripter cs 1번째줄은 매크로 함수를 인클루드 하는것입니다. 5번째줄에 보면 section .text이 있는데 section은 코드를 작성할때 부분부분 나눠서 작성하는 곳입니다 일단 크게 3가지로 나눠보겠..

어셈블리어란?

안녕하세요. 오늘은 어셈블리어에 대해 알아보겠습니다 어셈블리어란 기계어랑 1:1 매칭이 가능한 언어입니다. 기계어란 CPU가 직접 사용하는 언어이고 1000 0000 1000 0000이런 식으로 숫자로 되어있습니다. 그래서 코딩을 하다가 예상한 대로 동작을 안 할 때, 어셈블리어를 보면 CPU가 동작을 어떻게 하는지 정확히 알 수 있습니다. 어셈블리언어에는 표기하는 방법이 크게 두 가지가 있습니다. INTEL과 AT&T표기법입니다. INTEL표기법은 윈도우OS에서 많이 사용되고 AT&T표기법은 리눅스에서 많이 사용합니다. 일단 기본적으로 어셈블리언어는 아래의 포맷을 따릅니다 opcode operand1 operand2 opcode(연산코드): CPU가 수행할 동작을 나타내는 코드 operand(피연산자)..

C언어 예시를 통해서 함수포인터 알아보기

안녕하세요. 오늘은 C언어 함수포인터를 알아보겠습니다 함수포인터란 포인터를 만들어서 함수에게 사용하는것 입니다 예시1) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include char func(int i, int j , char c) { return i+j+c; } int main() { char (*p)(int,int,char); // 반환형 (*변수명)[전달인자]; p = func; printf("%d \n",func(1,2,3)); printf("%d \n",p(1,2,3)); } Colored by Color Scripter cs 결과값 6 6 ─────────────────────────────────────────────────────────────────────..

예시로 알아보는 volatile 한정자

안녕하세요. 오늘은 C언어를 사용하여 volatile 한정자를 알아보겠습니다. volatile를 알아보기 전에 최적화를 알아야 합니다. 컴파일을 할 때 최적화(Optimization)이라는 기능이 있습니다. 최적화 기능을 사용하면 의미 없는 코드를 기계어로 변환할 때 코드를 무시해버리기도 해서 속도 향상이나 크기 줄이기가 가능합니다. 이런 식으로 컴파일러마다 최적화 옵션이 다 있습니다. 예를 들어서 최적화 기능을 켜고 아래의 코드를 글로 컴파일 해보겠습니다. 1 2 3 4 5 int i = 0; i=1; i=2; i=3; i=4; cs 2~4번 무시하고 i=4만 실행한다고 생각하면 됩니다 (만약 뒤의 코드에서 i를 사용하지 않으면 아무것도 안합니다) volatile는 변수 앞에 쓰고 최적화를 하지 말라는..