CBOR Codec
Mã hóa và giải mã định dạng dữ liệu nhị phân CBOR
Dán dữ liệu CBOR từ bắt gói mạng, thiết bị IoT hoặc phản hồi API
Dữ liệu mẫu
Kết quả giải mã
Nhập dữ liệu CBOR và nhấn Giải mã để xem kết quả
Trình xem byte
Nhập dữ liệu JSON hợp lệ để mã hóa thành CBOR
Mã hóa độ dài container
- Compact: Sử dụng byte tối thiểu (fixmap/fixarray khi ≤23 phần tử)
- Explicit 16-bit: Luôn sử dụng độ dài 2 byte (tiền tố 0xB9/0x99)
- Explicit 32-bit: Luôn sử dụng độ dài 4 byte (tiền tố 0xBA/0x9A)
- Indefinite: Sử dụng độ dài không xác định với mã kết thúc (0xBF...0xFF)
JSON Examples
Kết quả mã hóa
Nhập dữ liệu JSON và nhấn Mã hóa để tạo CBOR
Trình xem byte
Thống kê mã hóa
Tham chiếu kiểu dữ liệu CBOR
| Kiểu chính | Tên kiểu | Byte tiêu đề | Mô tả |
|---|---|---|---|
| 0 | Số nguyên không dấu | 0x00-0x1B | Số nguyên không âm từ 0 đến 2^64-1 |
| 1 | Số nguyên âm | 0x20-0x3B | Số nguyên âm từ -1 đến -2^64 |
| 2 | Chuỗi byte | 0x40-0x5B | Dữ liệu nhị phân thô có độ dài tùy ý |
| 3 | Chuỗi văn bản | 0x60-0x7B | Chuỗi văn bản được mã hóa UTF-8 |
| 4 | Mảng | 0x80-0x9B | Tập hợp có thứ tự các phần tử dữ liệu |
| 5 | Map | 0xA0-0xBB | Các cặp khóa-giá trị (đối tượng) |
| 6 | Tag | 0xC0-0xDB | Thẻ ngữ nghĩa cho các kiểu mở rộng |
| 7 | Simple/Float | 0xE0-0xFB | Boolean, null, undefined và số dấu phẩy động |
Tài liệu giao thức CBOR
CBOR là gì?
CBOR (Concise Binary Object Representation) là định dạng tuần tự hóa dữ liệu nhị phân được định nghĩa trong RFC 8949. Được thiết kế như một giải pháp thay thế nhỏ gọn cho JSON, CBOR mã hóa dữ liệu có cấu trúc thành định dạng nhị phân hiệu quả trong khi duy trì khả năng tương thích với mô hình dữ liệu JSON. Định dạng này tự mô tả, nghĩa là bộ giải mã có thể phân tích dữ liệu mà không cần định nghĩa schema bên ngoài. CBOR được thiết kế đặc biệt cho các môi trường hạn chế như thiết bị IoT và hệ thống nhúng nơi băng thông và sức mạnh xử lý là tài nguyên hạn chế.
Cấu trúc mã hóa nhị phân
Mỗi phần tử dữ liệu CBOR bắt đầu bằng một byte đơn chứa hai trường: kiểu chính (3 bit) và thông tin bổ sung (5 bit). Kiểu chính xác định danh mục dữ liệu (số nguyên, chuỗi, mảng, v.v.), trong khi thông tin bổ sung cho biết độ dài đối số hoặc chứa trực tiếp các giá trị nhỏ. Thiết kế header nhỏ gọn này có nghĩa là các giá trị đơn giản như số nguyên nhỏ chỉ cần một byte duy nhất.
| Thông tin bổ sung | Ý nghĩa |
|---|---|
| 0-23 | Giá trị được mã hóa trực tiếp (0-23) |
| 24 | Theo sau là 1 byte không dấu |
| 25 | Theo sau là 2 byte không dấu (big-endian) |
| 26 | Theo sau là 4 byte không dấu (big-endian) |
| 27 | Theo sau là 8 byte không dấu (big-endian) |
| 31 | Độ dài không xác định (cho chuỗi, mảng, map) |
Tùy chọn mã hóa độ dài container
CBOR cung cấp sự linh hoạt trong cách mã hóa độ dài container (mảng và map). Mặc dù tất cả các mã hóa hợp lệ tạo ra dữ liệu ngữ nghĩa giống nhau, biểu diễn nhị phân khác nhau. Công cụ này cung cấp bốn chế độ mã hóa cho các yêu cầu hệ thống khác nhau.
Ví dụ mã hóa: {"name":"Alice","age":30}
Cùng một đối tượng JSON có thể được mã hóa theo nhiều cách hợp lệ:
| Chế độ | Byte tiêu đề | Mô tả |
|---|---|---|
| Compact | A2 ... | 0xA2 = fixmap(2), mã hóa nhỏ nhất |
| Explicit 16-bit | B9 00 02 ... | 0xB9 = map16, theo sau là độ dài 2 byte |
| Explicit 32-bit | BA 00 00 00 02 ... | 0xBA = map32, theo sau là độ dài 4 byte |
| Indefinite | BF ... FF | 0xBF = map không xác định, kết thúc bằng 0xFF |
Cả bốn mã hóa đều giải mã thành JSON giống nhau. Chọn nhỏ gọn để tiết kiệm kích thước, độ dài rõ ràng cho tương thích giao thức, hoặc không xác định cho các tình huống streaming.
So sánh CBOR và JSON
Cả hai định dạng đều đại diện cho cùng một mô hình dữ liệu logic nhưng phục vụ các mục đích khác nhau. CBOR ưu tiên mã hóa nhỏ gọn và hiệu quả xử lý, trong khi JSON nhấn mạnh khả năng đọc của con người và khả năng tương tác dựa trên văn bản phổ quát.
- Kích thước mã hóa nhỏ hơn (thường 30-50%)
- Hỗ trợ gốc dữ liệu nhị phân
- Phân tích và mã hóa nhanh hơn
- Thẻ ngữ nghĩa tích hợp cho ngày tháng, URI, v.v.
- Con người có thể đọc và chỉnh sửa
- Hỗ trợ phổ quát trình duyệt/ngôn ngữ
- Gỡ lỗi và ghi log dễ dàng hơn
Ứng dụng phổ biến
- Giao tiếp thiết bị IoT và truyền dữ liệu cảm biến
- Giao thức xác thực WebAuthn/FIDO2
- Bảo mật COSE (ký và mã hóa đối tượng CBOR)
- Nhắn tin CoAP (giao thức ứng dụng hạn chế)
- Cấu hình hệ thống nhúng và lưu trữ dữ liệu
Thẻ ngữ nghĩa
Các thẻ CBOR cung cấp ý nghĩa ngữ nghĩa cho các phần tử dữ liệu. Thẻ là các wrapper tùy chọn cho biết cách giải thích giá trị được bọc, cho phép mở rộng kiểu vượt ra ngoài các kiểu dữ liệu cơ bản.
| Số thẻ | Ý nghĩa ngữ nghĩa |
|---|---|
| 0 | Chuỗi ngày/giờ tiêu chuẩn (RFC 3339) |
| 1 | Ngày/giờ dựa trên epoch (Unix timestamp) |
| 2 | Số dương lớn |
| 3 | Số âm lớn |
| 32 | Tham chiếu URI |
| 55799 | CBOR tự mô tả (magic number) |
Công Cụ Liên Quan
Công Cụ Protocol Buffers
Bộ mã hóa/giải mã Protocol Buffers trực tuyến. Phân tích lược đồ .proto, mã hóa JSON sang nhị phân hoặc giải mã nhị phân sang JSON
Trình Định Dạng JSON
Định dạng và xác thực dữ liệu JSON để cải thiện khả năng đọc và gỡ lỗi
Bộ Mã Hóa/Giải Mã Base64
Mã hóa và giải mã chuỗi Base64 nhanh chóng, hỗ trợ chuyển đổi cả văn bản và tệp
MQTT Codec
Mã hóa và giải mã gói giao thức MQTT với phân tích trường chi tiết, trình xem Hex và trình xây dựng gói