도구스개발

COBS(바이트 스터핑) 인코딩 계산기

16진수 바이트열을 COBS(Consistent Overhead Byte Stuffing)로 인코딩·디코딩합니다. 시리얼 통신에서 0바이트를 프레임 구분자로 쓰기 위해 데이터의 0바이트를 없앱니다.

공백·쉼표·0x 접두는 무시합니다

COBS 인코딩 결과

03 11 22 02 33

원본 4바이트 → 인코딩 5바이트 (오버헤드 +1바이트)

원본11 22 00 33
인코딩 결과03 11 22 02 33
결과에 0바이트가 있는가없음(정상)
디코딩 후 왕복 검증원본과 일치
인코딩 결과에 0바이트가 하나도 없고, 다시 디코딩하면 원본과 정확히 일치합니다. 실제로 전송할 때는 이 결과 뒤에 0x00을 하나 더 붙여 패킷의 끝을 표시합니다.
코드바이트는 «다음 0바이트까지의 거리(+1)»를 뜻합니다. 리터럴이 254바이트 연속되면 0바이트가 없어도 코드 255로 강제로 블록을 끊습니다 — 이 상한 덕분에 오버헤드가 «최대 254바이트당 1바이트」로 예측 가능합니다.

사용 방법

  1. 1인코딩할 바이트열을 16진수로 입력합니다(공백으로 구분해도 됩니다).
  2. 2인코딩 결과에 0바이트가 하나도 없는지 확인합니다.
  3. 3인코딩 결과를 다시 디코딩해 원본으로 돌아오는지 왕복 검증합니다.

자주 묻는 질문

데이터 안의 모든 0바이트를 다른 값으로 바꿔치기해서, 0바이트를 안전하게 «패킷의 끝» 구분자로 쓸 수 있게 해 줍니다. 시리얼·임베디드 통신에서 패킷 경계를 표시하는 데 널리 씁니다.

데이터를 0바이트 기준으로 여러 블록으로 나누고, 각 블록 앞에 «그 블록 길이+1»을 나타내는 코드바이트를 붙입니다. 블록을 가르던 0바이트 자체는 버립니다. 디코딩할 때는 코드바이트가 알려주는 만큼 리터럴을 읽은 뒤, 마지막 블록이 아니라면 0바이트를 하나 복원해 넣습니다.

코드바이트가 1바이트라 255까지 표현되는데, 255는 «0바이트로 안 끊긴 꽉 찬 블록»이라는 특수한 의미로 예약돼 있기 때문입니다. 그래서 실제 0바이트를 만나지 않아도 리터럴이 254바이트 연속되면 강제로 블록을 끊습니다. 이 상한 덕분에 COBS의 오버헤드는 데이터 크기와 무관하게 «254바이트당 최대 1바이트»로 예측 가능합니다.

이 계산기는 COBS 인코딩 함수 자체의 출력(순수 코드)만 보여줍니다. 실제 전송에서는 이 출력 뒤에 0x00을 하나 더 붙여 «여기서 패킷이 끝난다»는 프레임 구분자로 씁니다. 인코딩 결과에는 0바이트가 없다는 것이 보장되므로, 그 뒤에 오는 0x00만 안전하게 구분자로 읽을 수 있습니다.

전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.

알아두면 좋은 점

  • Cheshire & Baker(1999)의 정의를 그대로 구현했습니다. 여러 구현체(Rosetta Code 등)의 예제 6개(00→01 01, 00 00→01 01 01, 00 11 00→01 02 11 01, 11 22 00 33→03 11 22 02 33, 11 22 33 44→05 11 22 33 44, 11 00 00 00→02 11 01 01 01)로 인코딩 함수를 검증했습니다(2026-09-05).
  • 디코딩 함수는 임의 입력(빈 배열, 0만 있는 경우, 254·255바이트 경계 포함)에 대해 인코딩→디코딩이 원본으로 정확히 돌아오는 것으로 검증했습니다.
  • 인코딩 결과에는 프레임 구분자(0x00)를 붙이지 않은 순수 COBS 코드만 낸다는 점을 명시했습니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 5일 · 결과는 참고용 추정치입니다.