반응형
바이트 내부 비트 순서에 관한 용어
- MSB (Most Significant Bit): 가장 왼쪽 비트
- LSB (Least Significant Bit): 가장 오른쪽 비트
- MSB-first: 가장 왼쪽 비트 부터 처리됨을 의미
- LSB-first: 가장 오른쪽 비트 부터 처리됨을 의미
크기가 2바이트 이상 데이터를 메모리에 저장할 때 바이트 순서에 따른 용어
4바이트 숫자 0x12345678
를 예로 들어
- MSB(Most Significant Byte): 가장 중요한 바이트 = 가장 큰 단위 숫자에 해당하는 바이트 = 가장 왼쪽 바이트. 이때 B 가 bit가 아니라 byte임에 주의 , 예에서 0x12
- LSB(Least Significant Byte): 가장 덜중요한 바이트 = 가장 작은 단위 숫자에 해당하는 바이트 = 가장 오른쪽 바이트. 예에서 0x78
- 빅 엔디언 (Big Endian): MSB-first, MSB를 먼저 로드한다.
- 주소 0: 0x12
- 주소 1: 0x34
- 주소 2: 0x56
- 주소 3: 0x78
- 리틀 엔디언 (Little Endian): LSB-first, LSB를 먼저 로드한다.
- 주소 0: 0x78
- 주소 1: 0x56
- 주소 2: 0x34
- 주소 3: 0x12
숫자 표현
2진수
숫자 앞에 접두어 0b를 붙임
16진수
숫자 앞에 접수어 0x를 붙임
16진수로 변환
숫자.hex()
hex(숫자) # 접두어가 빠진다.
2진수로 변환
숫자.bin()
bin(숫자) # 접두어가 빠진다.
10진수로 변환
# 다른 진법의 숫자를 10진수로 변환
decimal_from_binary = int("1101", 2) # 2진수 1101 -> 10진수 13
decimal_from_hex = int("1F", 16) # 16진수 1F -> 10진수 31
decimal_from_octal = int("21", 8) # 8진수 21 -> 10진수 17
print(decimal_from_binary) # 출력: 13
print(decimal_from_hex) # 출력: 31
print(decimal_from_octal) # 출력: 17
포멧 문자열
문자 | 바이트 순서 | 크기 | 정렬 |
---|---|---|---|
@ |
네이티브 | 네이티브 | 네이티브 |
= |
네이티브 | 표준 | none |
< |
리틀 엔디안 | 표준 | none |
> |
빅 엔디안 | 표준 | none |
! |
네트워크 (= 빅 엔디안) | 표준 | none |
포맷 | C형 | 파이썬 형 | 표준 크기 | 노트 |
---|---|---|---|---|
x |
패드 바이트 | 값이 없습니다 | (7) | |
c |
char | 길이가 1인 bytes | 1 | |
b |
signed char | 정수 | 1 | (1), (2) |
B |
unsigned char | 정수 | 1 | (2) |
? |
_Bool | bool | 1 | (1) |
h |
short | 정수 | 2 | (2) |
H |
unsigned short | 정수 | 2 | (2) |
i |
int | 정수 | 4 | (2) |
I |
unsigned int | 정수 | 4 | (2) |
l |
long | 정수 | 4 | (2) |
L |
unsigned long | 정수 | 4 | (2) |
q |
long long | 정수 | 8 | (2) |
Q |
unsigned long long | 정수 | 8 | (2) |
n |
ssize_t |
정수 | (3) | |
N |
size_t |
정수 | (3) | |
e |
(6) | float | 2 | (4) |
f |
float | float | 4 | (4) |
d |
double | float | 8 | (4) |
s |
char[] | bytes | (9) | |
p |
char[] | bytes | (8) | |
P |
void* | 정수 | (5) |
import struct
# 4바이트 정수를 포함한 구조체
data_native = struct.pack('@I', 1) # 시스템 기본 바이트 순서 및 정렬
data_packed = struct.pack('=I', 1) # 시스템 기본 바이트 순서, 정렬 없음
data_little = struct.pack('<I', 1) # 리틀 엔디언, 정렬 없음
data_big = struct.pack('>I', 1) # 빅 엔디언, 정렬 없음
data_network = struct.pack('!I', 1) # 빅 엔디언(네트워크), 정렬 없음
print(data_native) # 출력: 시스템에 따라 다름
print(data_packed) # 출력: 예) b'\x01\x00\x00\x00'
print(data_little) # 출력: b'\x01\x00\x00\x00'
print(data_big) # 출력: b'\x00\x00\x00\x01'
print(data_network) # 출력: b'\x00\x00\x00\x01'
반응형
'대동단결 Python' 카테고리의 다른 글
파이썬을 위한 비동기 멀티테스킹 asyncio 사용하기 (0) | 2024.07.19 |
---|---|
JSON으로 직렬화할 수 있는 Python 데이터 타입 (0) | 2024.07.12 |
모듈 일괄 설치 (1) | 2023.12.19 |
라즈베리파이 파이썬 업그레이드 (0) | 2023.07.27 |
파이썬의 데코레이션 이란? (0) | 2023.02.04 |
댓글