본문 바로가기

분류 전체보기894

ARINC-429 Protocol ARINC ARINC는 미국 소유 비영리단체인 Aeronautical Radio, Inc.의 약자로 여기서 제정된 항공전자 표준이 ARINC 프로토콜이다. 항공 기술 분야에서 사용되는 매우 다양한 ARINC 표준이 있으며 ARINC 400, 500, 600, 700, 800 같은 다양한 하위 시리즈들이 있다. ARINC 429 그 중에서도 ARINC 429는 항공전자 장비간 데이터 전송을 위한 가장 널리 사용되는 표준으로 Mark 33 Digital Information Transfer System(DITS)으로 알려져 있기도 하다. Network Topology ARINC 429 네트워크는 single transmitter(source)에 receivers(sink)가 연결된 구조로 한 transmit.. 2023. 5. 31.
경기도 광주 천진암 계곡 관산등산로공용주차장에 무료주차가 가능하다. 연휴였지만 늦은시간에 와서 그런지 한산했다. 등산로가 있다고는 하는데 보이진 않았다. 2023. 5. 30.
C ] 포인터와 const const는 변수나 함수 매개변수를 선언할 때 사용되는 한정자로 값을 변경할 수 없음을 나타낸다. 변수를 상수로 취급하고자 할 때 유용하며, 많은 곳에서 참조되고 변경되는 것을 원하지 않는 정적인 정보를 보호하는데 사용된다.  포인터 형식과 const 한정자가 같이 쓰일 때 const의 위치에 따라 다음과 같은 차이가 있다.   1. 상수를 가리키는 포인터 : ptr의 역참조를 통해 값을 변경할 수 없지만, ptr이 다른 주소를 가리키도록 변경할 수 있다.const int* ptr     2. 상수 포인터 : ptr 자체를 다른 주소를 가리키도록 변경할 수 없지만, ptr의 역참조를 통해 값을 변경할 수 있다.int* const ptr     3. 상수를 가리키는 상수 포인터 : ptr이 가진 주소를 변.. 2023. 5. 30.
C ] 비트필드와 공용체 사용 #include #include typedef struct { uint32_t bit1 : 1; uint32_t bit2 : 2; uint32_t bit3 : 3; } MyBits; union MyUnion { uint32_t all; MyBits bits; }; int main() { union MyUnion myUnion; myUnion.all = 0; myUnion.bits.bit1 = 1; myUnion.bits.bit2 = 2; myUnion.bits.bit3 = 5; printf("all: %u\n", myUnion.all); printf("bit1: %u\n", myUnion.bits.bit1); printf("bit2: %u\n", myUnion.bits.bit2); printf("bit3.. 2023. 5. 29.
C++ ] Format-Hex 명령어(Hex 덤프) 직접 구현 #include #include #include #include using namespace std; namespace fs = filesystem; void printhex(char *path) { // ios::binary 플래그를 사용해 이진모드로 파일 열기 ifstream file(path, ios::binary); if (!file) { cerr 2023. 5. 29.
시맨틱 버저닝 (Semantic Versioning) 시맨틱 버저닝은 소프트웨어의 버전 번호를 관리하기 위한 규칙 및 방법론이다. 버전 번호를 통해 소프트웨어의 변경 내용과 호환성을 명확히 표현하는 데 그 목적이 있으며, 일반적으로 "MAJOR.MINOR.PATCH" 형식으로 버전 번호를 표기한다. 1. MAJOR (주 버전): 기존 버전과 호환되지 않는 주요 변경사항이 있을 때 증가. 일반적으로 API의 큰 변경이나 하위 시스템의 구조적 변화를 의미하므로 주 버전이 변경되면 이전 버전과의 호환성이 보장되지 않을 수 있다. 2. MINOR (부 버전): 이전 버전과의 하위 호환성을 유지하면서 새로운 기능이 추가되거나 기존 기능이 변경될 때 증가. 주 버전 변경 없이 부 버전이 업데이트되면, 사용자는 새로운 기능을 사용하거나 개선된 기능을 기대할 수 있다. .. 2023. 5. 28.
C++ ] Manipulator와 iomanip 헤더 iomanip 헤더에는 스트림을 제어하기 위한 다양한 Manipulator가 포함되어 있다. 스트림은 C++에서 데이터의 입력 및 출력을 처리하는 방식을 말하며, 이를 위해 "iostream" 라이브러리에서 제공하는 클래스와 함수를 사용하는데, Manipulator는 이러한 스트림을 조작하여 데이터의 포맷팅, 출력 형식을 유연하게 지정할 수 있게 한다. endl; 도 개행 문자를 출력하고 버퍼를 비우는 Manipulator이다. #include #include int main() { int number = 12345; double pi = 3.14159; // setw()를 사용하여 출력 폭(width) 지정 std::cout 2023. 5. 28.
C++ ] static_cast와 reinterpret_cast. 그 외 const_cast, dynamic_cast C++에서 C 스타일의 캐스팅은 더 이상 권장되지 않는다. C 스타일 캐스팅은 실수할 여지가 많고 의도하지 않은 형식 변환이 발생할 수 있기 때문에 C++에서는 대신 static_cast, reinterpret_cast, const_cast, dynamic_cast와 같은 명시적인 캐스팅 연산자들을 사용하는 것을 권장한다. 1. static_cast : 정적 캐스트 - 고정된 표준 형식 변환에 사용된다. - 상속 관계가 아닌 타입 간의 변환, 숫자형 타입 간의 변환, 포인터 간의 변환 등. int num = 10; double numDouble = static_cast(num); // int를 double로 변환 2. reinterpret_cast : 재해석 캐스트 - 다른 타입과 포인터 사이의 비트 패.. 2023. 5. 28.
C++ ] 예외처리 try-catch C++에서 try-catch 문은 예외가 발생할 수 있는 코드 블록을 감싸고, 발생한 예외를 적절하게 처리하는 메커니즘을 제공한다. try-catch 기본 구문 try { // 예외가 발생할 수 있는 코드 } catch (예외_유형1& e) { // 예외_유형1에 해당하는 예외 처리 } catch (예외_유형2& e) { // 예외_유형2에 해당하는 예외 처리 } catch (...) { // 기타 모든 예외를 처리하는 블록 } try 블록: 예외가 발생할 수 있는 코드를 포함하는 블록. 이 블록 내에서 예외가 발생하면 예외를 던진다. catch 블록: 발생한 예외를 처리하기 위한 블록. catch 블록은 발생한 예외의 유형에 따라 여러 개를 사용할 수 있다. 가장 specific한 예외 유형부터 순서대.. 2023. 5. 28.
Visual Studio 디버깅시 main함수에 명령인수 전달하기 프로젝트 우클릭 - 구성 속성 - 디버깅 - 명령 인수 2023. 5. 28.
C++ ] filesystem 라이브러리 filesystem 라이브러리는 파일 및 디렉토리 작업을 단순화하고 일반화하는 기능을 제공한다. C++ 17 표준 부터 포함되었으며, gcc/g++ 8 이상 최신 컴파일러에서 지원된다. experimental/filesystem 헤더를 포함하면 이전 버전에서 사용할 수 있을 수도 있다. 📂 현재 경로 출력 #include #include using namespace std; namespace fs = filesystem; int main() { fs::path currentPath = fs::current_path(); cout 2023. 5. 28.
C#, WinForms ] 자식 폼에서 부모 폼으로 데이터 전달 방법, 이벤트 / 프로퍼티 자식폼에서 dataGridView의 selectedIndex 전달 받기 1. 이벤트 활용 방법 자식폼 public partial class DeviceListForm : Form { // ... public event EventHandler OnItemSelected; // OK 버튼 클릭 시 private void buttonOk_Click(object sender, EventArgs e) { if(deviceList.SelectedIndex != -1) { OnItemSelected?.Invoke(this, deviceList.SelectedIndex); } } // ListBox 더블클릭 시 private void deviceList_MouseDoubleClick(object sender, Mous.. 2023. 5. 14.
WinForms ] Anchor, Dock properties Anchor 속성의 default 값은 Top, Left인데 이 값을 변경하면 bold 체로 바뀐다. Anchor 속성 미사용시 Anchor 속성 사용 Dock 속성 default 값은 None이다. toolStrip은 top에 dock하고 statusStrip은 bottom에 dock할 수 있다. 여러 컨트롤을 같은 방향에 dock할 수 있고 어떤걸 먼저 dock하느냐에 따라 화면에 표시되는게 달라진다. textBox의 multiLine 속성을 true로하고 dock 속성을 fill로 하면 마치 메모장같은 GUI를 볼 수 있다. splitContainer를 먼저 만들고 그 안에서 컨트롤을 dock하는 것도 가능하다. 2023. 5. 14.
C#, WinForms ] Event 와 delegate C#에서 이벤트를 사용하면 프로그램의 느슨한 결합(loose coupling)을 통해 객체 간 상호작용을 구현할 수 있다. 이벤트는 객체가 발생시키는 특정한 동작을 나타내며, 이벤트를 구독하는 다른 객체는 해당 이벤트를 수신하고 이벤트 처리기를 호출한다. 이를 통해 클래스 내부에서 발생한 동작을 외부에서 알림으로써 더욱 유연하고 효율적인 프로그래밍을 구현할 수 있다. 이벤트를 발생시키는 쪽이 Publisher이고 이벤트를 수신하고 처리하는 쪽이 Subscriber가 된다. 1. delegate 정의 및 이벤트 선언하기 Publisher 쪽에서 메서드를 참조하는 형식인 delegate를 사용하여 이벤트를 선언하면 된다. 직접 delegate 정의를 할 수도 있고 system namespace에 이미 정의된.. 2023. 5. 14.
C++ ] JSON 데이터 포맷, rapidjson 라이브러리 사용해 파싱 HTML 삽입 미리보기할 수 없는 소스 JSON(JavaScript Object Notation) 은 데이터 교환을 위한 경량화된 포맷으로, 객체와 배열 등의 데이터 구조를 표현한다. 객체는 중괄호 {} 로 감싸진 key-value 쌍들의 집합이며, 각각의 key는 문자열이고, value는 JSON에서 허용되는 모든 데이터 타입으로 표현될 수 있다. 배열은 대괄호 [] 로 감싸진 값들의 리스트이며, 역시 값은 JSON에서 허용되는 모든 데이터 타입으로 표현될 수 있다. JSON에서 객체의 속성들과 배열의 원소들은 콤마 , 로 구문하며 배열과 객체는 함께 사용할 수 있다. 객체는 배열의 요소로 포함될 수 있는데, 이 경우, 객체는 배열의 요소가 된다. 또한, 객체 안에 배열이 포함될 수 있으며. 이 경우,.. 2023. 5. 14.
Vector CANdb++ editor 아래 주소에서 다운로드 https://www.vector.com/int/en/download/candb-31-sp3/ 공식 매뉴얼 중국사이트이긴 한데 자세히 나와있는 매뉴얼 https://blog.csdn.net/qfmzhu/article/details/111403266 【DBC专题】-1-如何使用CANdb++ Editor创建并制作一个DBC_【dbc专题】-11_汽车电子助手的博客-CSDN博客 目录 0关键字/术语描述 1 启动“CANdb++ Editor” 2 创建一个新的DBC(CANdb network file (Data Base for CAN)) 3 创建CAN网络当中的Network nodes网络节点 4 创建CAN网络当中的Message消息 5 创建Message消息中Signals信 blog.csdn.net 2023. 5. 14.
C#, WinForms ] CRC Checker private void button1_Click(object sender, EventArgs e) { // 초기 디렉토리 설정 openFileDialog1.InitialDirectory = "C:\\"; // 파일 필터 설정 openFileDialog1.Filter = "모든 파일 (*.*)|*.*|텍스트 파일 (*.txt)|*.txt|바이너리 파일 (*.bin)|*.bin|데이터 파일 (*.dat)|*.dat"; // 마지막으로 파일 대화 상자에서 선택한 디렉토리를 기억하고, 다음번 파일 대화 상자를 열 때에는 이전에 선택한 디렉토리를 자동으로 선택 openFileDialog1.RestoreDirectory = true; if (openFileDialog1.ShowDialog() == DialogRes.. 2023. 5. 14.
C#, WinForms ] Drag & Drop 으로 파일 경로 얻기 파일 시스템에 액세스하기위해 using System.IO; 선언 Form의 AllowDrop 속성 true 일반적으로 Form이나 Control에는 파일을 Drop할 수 없기 때문에, 해당 Form이나 Control에 AllowDrop 속성을 true로 설정해주어야 한다. this.AllowDrop = true; DragEnter, DragDrop 이벤트 핸들러 추가 this.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop); this.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter); DragEnter 이벤트 : 사용자가 무언인가를 .. 2023. 5. 14.
C# ] delegate C#의 delegate는 메서드를 참조하는 객체로 C/C++의 함수포인터와 비슷한 개념이다. C#의 메서드포인터라고 보면 된다. 이 Delegate는 이벤트 핸들러나 콜백 함수를 구현하거나, 대리자 메서드를 호출하는 등 용도로 사용할 수 있다. using System; namespace ConsoleApp2 { class Program { static void Main(string[] args) { MyClass mc = new MyClass(); mc.Perform(); } } class MyClass { // 1. delegate 선언 private delegate void printInt2Consol(int i); public void Perform() { // 2. delegate 인스턴스 생성... 2023. 5. 14.
C++ ] stream 상속관계 ios_base : 다른 입출력 클래스들의 기반이 되는 클래스로서, 입출력 스트림의 상태와 플래그를 관리 ios : ios_base 클래스를 상속하며, 입출력 스트림의 상태와 플래그를 조작할 수 있는 멤버 함수를 제공 istream : 입력 스트림을 다루는 클래스. 콘솔 입력 및 파일 읽기 등을 다룰 수 있다. ostream : 출력 스트림을 다루는 클래스. 콘솔 출력 및 파일 쓰기 등을 다룰 수 있다. fstream : 파일 입출력을 다루는 클래스. 파일의 읽기 및 쓰기를 다룰 수 있다. stringstream : 메모리상에서 문자열을 읽고 쓰기 위한 클래스. std::string과 유사한 인터페이스를 제공하며, 문자열을 파싱하거나 변환하기 위한 용도로 사용된다. ifstream : 파일 입력에 특화된.. 2023. 5. 14.
C#, WinForms ] 폼 시작시, 종료시 이벤트 호출 순서 HTML 삽입 미리보기할 수 없는 소스 폼이 Show() 메소드로 호출되면 다음과 같은 순서로 이벤트가 발생한다. 1. 폼의 생성자(Constructor)가 호출된다. 2. 폼의 Load 이벤트(이벤트 핸들러)가 발생한다. 3. 폼의 Shown 이벤트(이벤트 핸들러)가 발생한다. 생성자는 Form 객체를 생성할 때 호출되며, Load 이벤트는 Form이 로드될 때 발생하고, Shown 이벤트는 폼이 처음 화면에 표시될 때 발생한다. 폼 Load 이벤트 호출 시점에는 폼과 관련된 컨트롤들이 메모리에 로드되고 초기화되지만, 아직 폼이 화면에 보이지는 않는 상태이다. 따라서 이 때 폼의 크기나 위치를 변경하거나, 다른 컨트롤의 위치나 크기를 폼에 맞게 조정할 수 있다. 또한 Form이 화면에 나타나기 전이므로.. 2023. 5. 14.
C#, WinForms ] program.cs C# 프로그램 진입점 using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace Appname1 { internal static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } using 문을 .. 2023. 5. 14.
Winforms ] ToopStrip, MenuStrip 속성 ToolStrip 화살표클릭 - Dock 을 통해 ToolStrip의 위치를 정할 수 있으며 ToolStrip size는 Form의 size에 맞게 자동 조정된다. 그리고 아래 버튼을 클릭해 다양한 컨트롤을 ToolStrip 안에 추가할 수 있다. ToolStrip 을 선택하며 속성을 변경할 수 있고, ToolStrip 내의 컨트롤을 클릭하여 각자 속성을 변경할 수도 있다. ToolStrip 내의 컨트롤을 우클릭하여 주요 속성을 변경할 수도 있는데 ToolStripButton 의 경우 DisplayStyle 을 Text/Image/ImageAndText 중에서 선택할 수 있다. AutoSize 를 False로 하면 ToolStrip의 크기를 임의로 조절할 수 있다. 우클릭 - 이미지 설정 또는 속성의 I.. 2023. 5. 14.
Windows ] 윈도우에서 파일 Hex dump 하는 방법 파워쉘을 열고 아래 명령어 뒤에 hex dump할 파일 경로를 입력하면 된다. format-hex Format-Hex C:\Users\Username\Documents\example.bin Format-Hex 명령어는 내부적으로 아래의 과정으로 처리된다. Get-Content -Path [파일 경로] -Encoding Byte | Format-Hex 2023. 5. 14.
C# ] namespace 네임스페이스(namespace)는 C#에서 클래스, 구조체, 인터페이스 등을 그룹화하는 데 사용되며, 각 그룹에 대한 유일한 식별자 역할을 한다. 네임스페이스를 사용하면 다른 네임스페이스에선 동일한 이름의 클래스 등을 정의할 수 있어 클래스 이름이나 함수 이름 등이 충돌하는 것을 방지할 수 있으며, 클래스나 함수 등을 논리적으로 그룹화하여 코드의 가독성을 높일 수 있다. C#에서는 기본적으로 System이라는 네임스페이스가 제공되는데 이 네임스페이스에는 C#에서 기본으로 제공되는 클래스들이 포함되어 있다. 또한, 사용자가 직접 네임스페이스를 정의하여 사용할 수 있다. namespace MyNamespace { // 클래스, 구조체, 인터페이스 등의 정의 } 같은 네임스페이스 안에 있는 클래스들은 서로를 .. 2023. 5. 14.
C# ] NuGet 패키지 관리자 사용하여 프로젝트에 패키지 추가 C#에서 라이브러리를 추가하는 방법은 크게 두 가지가 있다. 1. NuGet 패키지 관리자를 사용하는 방법 : NuGet은 오픈 소스 라이브러리 패키지 관리 도구로, 이걸 사용하면 Visual Studio에서 간편하게 패키지를 검색하고 설치할 수 있다. NuGet을 통해 패키지를 설치하면 해당 패키지가 포함하는 라이브러리 파일들이 프로젝트에 자동으로 추가된다. 2. 프로젝트 참조를 사용하는 방법 : 프로젝트 참조를 사용하는 방법에는 두 가지가 있다. 2-1. DLL 추가 : DLL을 추가하는 방법은 프로젝트에서 외부 라이브러리를 사용하려는 경우에 사용된다. 추가할 DLL 파일을 프로젝트의 참조에 추가하면 해당 DLL에 있는 모든 클래스, 인터페이스, 메서드 등을 사용할 수 있다. - 프로젝트를 우클릭하고.. 2023. 5. 14.
WinForms ] 콘솔창 출력 솔루션 우클릭 Properties - Application 탭 - Output type : Console Application 선택 이제 Console.WriteLine();으로 출력할 수 있다. 2023. 5. 14.
Excel ] 엑셀 스타일 삭제하기 외부에서 가져온 엑셀 파일에 스타일이 굉장히 많이 존재하는 경우가 있다. 이렇게 많은 스타일은 파일의 용량을 커지게하고, 속도저하의 원인이 될 수 있으므로 꼭 필요한게 아니라면 삭제해주면 좋다. 1. 단축키 ALT + F11 을 눌러 Visual Basic을 연다. 파일 - 옵션 - 리본 사용자 지정 에서 개발도구를 체크 한 뒤 개발 도구 탭에서 Visual Basic을 클릭해도 된다. 2. 삽입 - 모듈 3. 모듈에 아래 텍스트를 입력한다. Sub 셀스타일삭제() Dim 스타일 As Style Dim 개수 As Long For Each 스타일 In ActiveWorkbook.Styles If 스타일.BuiltIn = False Then On Error Resume Next 스타일.Delete 개수 = .. 2023. 5. 14.
Excel ] 그림 개체 한번에 선택하기 홈 - 찾기 및 선택 - 개체 선택 클릭 개체선택이 활성화된 상태에서는 드래그 앤 드롭으로 원하는 범위의 개체들을 선택할 수 있다. 선택 후 다시 한번 개체선택을 눌러 주면 비활성화 된다. 홈 - 찾기 및 선택 - 선택 창 오른쪽에 개체 선택 창이 나타난다. 홈 - 찾기 및 선택 - 선택 창 아무 개체나 클릭 후 서식 - 선택 창을 눌러 나타나게 할 수도 있다. 2023. 5. 14.
[C#] 현재 .NET SDK에서는 .NET 6.0을(를) 대상으로 하는 것을 지원하지 않습니다. .NET SDK 버전 확인 dotnet --list-sdks Visual Studio 2022는 .NET Core 6.0을 기본적으로 지원하며, .NET 6 SDK도 함께 제공하니 Visual Studio 2022를 사용하면 된다. 2023. 5. 14.