COBS . Consistent Overhead Byte Stuffing
- 바이트 시리즈의 프레이밍 알고리듬 중의 하나 .
- - 예 : 시리얼 통신 경로로 N 바이트 단위로 송신하려는 경우 COBS 인코딩하여 끝에 delimiter ( 0) 송신하고 이를 수신한 측에서 COBS decoding 하면 송신측에서 의도한 N 바이트 구간을 추출가능하다.
- COBS encoding 프레임들의 경계 지점에만 delimiter (통상 0 으로 함) 값이 등장하게되고 원본 데이터에 있던 0의 값들이 있던 자리에는 다음 0까지의 오프셋을 기록하므로 프레임의 경계 지점에만 0인 값이 단 1개 존재한다. 수신측에서는 프레임 경계지점 값이 0인 것 탐색하여 COBS encoding 된 영역만 추출하여 COBS decoding 하여 원본 데이터를 복원한다.
COBS encoding 규칙 및 예시

위 도식의 예에서는 원본데이터에 0이 1개 만 있는데 , 0이 1개 이상인 원본 데이터 예 1,2,0,3,4,0,5 라고 하고 아래 처럼 이해 하면 쉽다.
COBS encoding 끝자리에는 0을 기록한다. 첫 자리에는 원본데이터에서 처음 등장하는 0 의 오프셋( 본 예에서는 3 )을 기록하고 데이터 중의 0 이 있는 자리에는 다음 0이 나오는 오프셋으로 기록해둔다. 원본 데이터에서 마지막 0 자리에는 끝자리에 기록해둔 0까지의 오프셋(본 예에서는 2)을 기록한다.
최종 COBS 인코딩 바이트열 : 3,1,2,3,3,4,2,5,0
핵심 : COBS 인코딩된 바이열에서 0은 프레임 경계 지점에만 등장한다.
COBS encoding 최대 바이트 증가량
원본 데이터 N 바이트를 COBS 인코딩 후 델리미터(0x00)까지 포함한 최종 크기는 최대 N + 2 + (int)(N/254) 바이트가 된다.
예시.
- N=254바이트 이하일 때는 최대 2바이트가 증가하여 총 257, N=255 이면 3바이트 증가하여 총 258
- N=4096 이면, 4096 + 2 + 16 이므로 총 4,114바이트
원본 데이터 수량제한 없음
COBS 알고리즘 자체로는 원본 데이터의 크기(수량) 제한이 없다.
오프셋 값을 1바이트(0x01~0xFF)로 표현하므로 다음 0까지의 거리가 최대 254칸으로 제한될 뿐이다. 연속된 데이터가 254바이트를 넘어가면 0이 없더라도 강제로 오프셋 '255'(0xFF)를 삽입하여 처리하기 때문에, 원본 데이터가 아무리 길어도 이론상 모두 인코딩할 수 있다.
예시: 260바이트 데이터 인코딩 시 실제 구조
예를 들어 0x00이 하나도 없는 0x01, 0x02, ..., 0x01 형태의 260바이트 원시 데이터가 있다고 가정해보자.
[원시 데이터 (260바이트)]
[0x01, 0x02, ... (254바이트 데이터) ..., 0x03, 0x04, ... (6바이트 데이터)]
이를 cobs 인코딩 하면 262바이트의 단일 블록이 만들어진다.
[COBS 인코딩 완료된 결과물 (262바이트)]
|
v
[255] [0x01, 0x02, ... 254바이트 데이터 ...] [7] [0x03, 0x04, ... 6바이트 데이터 ...]
- 맨 첫 바이트 [255]: 수신 측에 "다음 오프셋은 255바이트 뒤에 있다"고 알려준다.
- 254바이트 데이터가 그대로 나열.
- 중간 오프셋 바이트 [7]: 수신 측은 255번째 위치에서 이 [7]을 만난다. 255라는 값은 원래 데이터에 0x00이 없었어도 강제로 삽입된 것이므로, 수신 측은 원래 데이터에 0x00을 복원하지 않고 "다음 0x00 위치는 7바이트 뒤에 있구나" 하고 계속 읽어 나간다.
- 남은 6바이트 데이터가 나열.
COBS 라이브러리
cobs-c
- 프레임 전체 블럭 단위로만 처리 가능. 바이트 스트림 방식 지원안됨.
GitHub - cmcqueen/cobs-c: Consistent Overhead Byte Stuffing — C implementation
Consistent Overhead Byte Stuffing — C implementation - cmcqueen/cobs-c
github.com
nano cobs
- Incremental Encoding/Decofing 을 목표로 구현된것. 즉 바이트 스트림 지원됨.
- 바이트 스트림외에 프레임 전체블럭 단위 처리하는 함수도 구현되어있다.
- 상기 cobs-c 보다 월등히 유용함.
GitHub - charlesnicholson/nanocobs: A C99 implementation of the Consistent Overhead Byte Stuffing ("COBS") algorithm.
A C99 implementation of the Consistent Overhead Byte Stuffing ("COBS") algorithm. - charlesnicholson/nanocobs
github.com
- 바이트 스트림 의도했으나 상기 nano cobs 가 더 쉬워보임.
GitHub - grandcentrix/cobs: This is a C implementation of Consistent Overhead Byte Stuffing.
This is a C implementation of Consistent Overhead Byte Stuffing. - grandcentrix/cobs
github.com
Zephyr RTOS 내장 COBS
Zephyr . COBS 라이브러리
Zephyr 내장 COBS 라이브러리 - COBS 기본개념 : https://igotit.tistory.com/6611 헤더 경로: #include 주요 함수: cobs_encode(), cobs_decode() 특징: Zephyr 전용 네트워크 버퍼 구조체인 struct net_buf를 기반으로 동작하며,
igotit.tistory.com
파이썬 cobs 라이브러리

파이썬에서 cobs 구현예 : https://igotit.tistory.com/6694 의 com 포트 송신 코드 2
파이썬 . 시리얼 com 포트 통신 . PySerial
파이썬 . 시리얼 com 포트 통신 PySerial 설치 - 내부적으로 Win32 API 이용 - 설치 : pip install PySerial 주요 구현 개념 Baud Rate USB CDC 로 인식된 com 포트의 경우 Baud Rate 설정값은 통신속도를 제한하지 않는
igotit.tistory.com
안드로이드 라이브러리
- themarpe/cobs-java (Java)
- 특징: COBS의 표준 격인 cmcqueen/cobs-c 라이브러리를 자바로 그대로 포팅한 오픈소스.
- 장점: 원본 C 라이브러리와의 호환성이 가장 뛰어나며 구현이 직관적이라 안드로이드 Java/Kotlin 프로젝트 모두에서 매우 안정적으로 작동. [1]
- FabD86/cobs-kotlin (Kotlin)
- 특징: 코틀린(Kotlin) 환경에 맞추어 깔끔하게 작성된 전용 COBS 구현체.
- 장점: 최근 안드로이드 스튜디오의 기본 언어 트렌드인 코틀린의 확장 함수나 문법적 이점을 살려 개발할 수 있어, 최신 모던 안드로이드 앱 개발자들에게 접근성이 높다. [1]
- agrommek/COBS (Java)
- 특징: 스트림(Stream) 및 버퍼(Buffer) 기반의 메시지 처리를 염두에 두고 정밀하게 설계된 자바용 COBS 라이브러리.
- 장점: 시리얼 통신(UART/RS-232)이나 TCP 소켓 통신을 통해 안드로이드 장비와 임베디드 보드를 연동하는 실무 환경에서 구분자 처리를 안정적으로 수행..
- j-b-s / cobs-java (nanocobs 사상 부합 / Java·Kotlin 공용)
- 특징: 기존 cobs-c 방식의 한계를 극복하기 위해 자바의 InputStream / OutputStream 구조에 맞추어 인크리멘탈(스트림) 방식으로 구현된 라이브러리.
- 추천 이유: nanocobs가 추구하는 "메모리 오버헤드 제로" 및 "청크 단위 스트리밍 패킷 처리" 개념과 가장 잘 맞음. 안드로이드 소켓이나 USB 시리얼 포트에서 바이트가 들어오는 대로 실시간 디코딩(온더플라이)하기에 최적.
- Android NDK 기반 nanocobs 직접 연동 (C/C++ → Java/Kotlin JNI)
- 특징: 안드로이드 스튜디오에서 nanocobs C 코드를 그대로 가져와 NDK(JNI)로 빌드하여 사용하는 방식.
- 추천 이유: nanocobs의 최대 장점인 In-place(추가 메모리 할당 없는) 연산 및 극한의 C99 최적화 성능을 안드로이드 앱 계층에서 100% 그대로 누릴 수 있는 유일한 방법. 성능과 신뢰도가 가장 확실하며, 대용량 바이너리 스트림을 다룰 때 가비지 컬렉터(GC) 부하가 전혀 없다. .
- RBus / cobs-java (임베디드 버스 연동 특화)
- 특징: 고신뢰성 차량용·산업용 통신 프레임워크(RBus)의 자바 서브 프로젝트로 개발된 COBS 모듈..
- 추천 이유: nanocobs가 설계된 배경(바이트 탈락이 잦은 불안정한 커뮤니케이션 버스 환경)과 동일한 목적을 가집니다. 연속된 스트림 데이터 속에서 패킷 경계(0x00)를 정밀하게 파싱하고 유효성을 검증하는 인크리멘탈 구조가 탄탄하게 구현되어 있다.
첫 등록 : 2026.06.16
최종 수정 : 2026.08.04
단축 주소 : https://igotit.tistory.com/6611
'지속가능티끌 > Data.Math.Phys' 카테고리의 다른 글
| FlatBuffers . 고효율 직렬화 라이브러리 (0) | 2026.07.28 |
|---|---|
| PlotJuggler . 시계열 챠팅 툴 (0) | 2026.07.24 |
| 피어슨 상관 계수 . Pearson Correlation Coefficient (0) | 2026.01.22 |
| Cantor Pairing Function . 칸토어 페어링 함수 . 2개 수로 고유 수 만들기 (0) | 2026.01.21 |
| ONNX . Open Neural Network Exchange . 딥러닝 모델 변환 표준 포맷 (0) | 2024.08.29 |
댓글