Python
#Ubuntu 18.04 LTS
#Python 3.6.5
#>> 상세 설명, 실행화면
When use?
C Struct와 Python value 간의 변환이나 파일에 Binary Data를 저장하거나, Network Connection 시에 주로 사용된다고 한다.
나는 C Struct와 Python value 간의 호환을 위해서 사용하였다.
사용하기 전에 조사를 해 본바로는 언어에 따라 내용을 직렬화해 data로 전달해 주어야 한다는 얘기도 있었다.
이 부분에 대해서는 추가로 테스트가 필요하지만,
C언어는 기본적으로 data를 직렬화하기 때문에 구조체의 내용을 그대로 전달하면 문제가 없을 것으로 생각된다.
( 일단, local에서 server와 client 코드의 동작을 잘 이루어 졌다. )
What is Struct?
struct는 무엇일까? C에서는 구조체라고 말하며 아마 Python에서는 특별히 따로 불리는 명칭 없이 똑같이 구조체라고 하는 것 같다.
01. At C
c/c++에서 구조화 된 데이터를 처리할 때 사용, struct라하고 구조체라고 부른다.
typedef struct
{
. . .
} struct_name;
라는 형태를 이용해 선언한다.
구조체화되었다는 말은 의미가 연결되어 한 덩어리로 처리하는 방식을 얘기한다고 한다.
선언부 만으로는 변수의 저장공간을 확보하지 않기 때문에 개인이 헤더파일을 만들어서 include 선언시 중복선언을 해도 상관없다고 한다.
위의 선언시 typedef 키워드를 붙이지 않으면 struct를 초기화 할 때마다 struct struct_name value_name 형식으로 써주어야 하지만,
typedef 키워드를 선언 후 사용하면 초기화 할 때 struct_name value_name 으로 초기화 가능하다.
좀 더 자세한 내용이 알고 싶다면 아래 참조내용에 위키백과 부분을 클릭하자.\
02. At Python
파이썬에서 struct는 모듈로 정의되어있다. ( 모듈 = 라이브러리라고 생각하면 되겠다. )
import struct
기본으로 import되어 있는 것이 아니기 때문에 파이썬 코드 상단에 첨부하여주어야한다.
주요 함수로는 pack 과 unpack 이 있다.
- struct.pack(fmt, v1, v2, ...): return string
지정된 format에 따라 values(v1, v2)를 감싸고, return type은 string 이다.
- struct.unpack(fmt, string): return tuple
지정된 format에 따라 string을 풀어내며, return type은 tuple 이다.
- 지원하는 format 형식
Examples
그렇다면 struct를 이용해서, C와 Python 사이의 데이터를 주고 받고 싶을 때는 어떻게 구성해야할까?
01. 구성내용
서버: Python 3.6.5
클라이언트: C
실행환경: Ubuntu 18.04 LTS, local
전달 데이터
1. string data
2. struct data
02. 주의할 점
at C
- default encoding language는 ascii이다.
- 배열생성 후 memset 함수로 배열의 빈 공간을 널문자( '\0' )로 초기화 해주어야 한다.
at Python
- default encoding lanaguage는 utf-8이다.
Common
- 언어나 운영체제에 따라서 비트 배열순서가 다를 수 있기 때문에
2018/09/11 - [#Leni #레니 #♥] - 메모리 정렬 방식
네트워크를 이용해 전송할 때는 네트워크 형식으로 변환하여 송/수신 하는 것이 안전하다.
비트 배열순서가 같은 Ubuntu 18.04LTS에서의 C와 Python에서는 따로 변환을 하지 않아도 괜찮았다.
- C의 경우 htonl, ltoh 와 같은 함수가 존재하며, Python은 찾아보길 바란다.
03. 예제 코드는 Git-Hub page를 참조하여 사용하길 바란다.
ᕕ( ᐛ )ᕗ ٩( ᐛ )و Go to Git-Hub!! < Python-byLeni/Basic/usingStruct_withC > ᕕ( ᐛ )ᕗ ٩( ᐛ )و
#2018년09월10일
- 패딩이 붙는 것에 민감한 사람들이 있다, 그들은 이 페이지를 참조하자! [본문으로]
'개발자 레니는 지금 - > 소프트웨어와 함께' 카테고리의 다른 글
[ Python ] What Is Pip? A Guide for New Pythonistas (0) | 2019.04.04 |
---|---|
[ Python ] 메소드 리스트, 딕셔너리 만들어 사용하기 (0) | 2018.10.17 |
[ C/C++ ] Type bool (0) | 2018.09.07 |
[ MODULE ] audioop:: pcm data 모노, 스테레오 정보 바꾸기 (0) | 2018.07.16 |
[ BASIC ] 발생자 제네레이터 (0) | 2018.07.16 |