CBORコーデック
CBORバイナリデータ形式のエンコードとデコード
ネットワークキャプチャ、IoTデバイス、APIレスポンスからのCBORデータを貼り付けてください
サンプルデータ
デコード結果
CBORデータを入力し、デコードボタンをクリックして結果を表示
バイトビューア
CBORとしてエンコードする有効なJSONデータを入力してください
コンテナ長エンコード
- Compact: 最小バイトを使用(≤23要素時にfixmap/fixarray)
- Explicit 16-bit: 常に2バイト長を使用(0xB9/0x99プレフィックス)
- Explicit 32-bit: 常に4バイト長を使用(0xBA/0x9Aプレフィックス)
- Indefinite: 終端コード付き不定長を使用(0xBF...0xFF)
JSON Examples
エンコード結果
JSONデータを入力し、エンコードボタンをクリックしてCBORを生成
バイトビューア
エンコード統計
CBORデータ型リファレンス
| メジャータイプ | 型名 | ヘッダーバイト | 説明 |
|---|---|---|---|
| 0 | 符号なし整数 | 0x00-0x1B | 0から2^64-1までの非負整数 |
| 1 | 負の整数 | 0x20-0x3B | -1から-2^64までの負の整数 |
| 2 | バイト文字列 | 0x40-0x5B | 任意長の生バイナリデータ |
| 3 | テキスト文字列 | 0x60-0x7B | UTF-8エンコードされたテキスト文字列 |
| 4 | 配列 | 0x80-0x9B | データ項目の順序付きコレクション |
| 5 | マップ | 0xA0-0xBB | キーと値のペア(オブジェクト) |
| 6 | タグ | 0xC0-0xDB | 拡張型のセマンティックタグ |
| 7 | 単純値/浮動小数点 | 0xE0-0xFB | ブール値、null、undefined、浮動小数点数 |
CBORプロトコルドキュメント
CBORとは
CBOR(Concise Binary Object Representation)は、RFC 8949で定義されたバイナリデータシリアライゼーション形式です。JSONのコンパクトな代替として設計されており、JSONのデータモデルとの互換性を維持しながら、構造化データを効率的なバイナリ形式にエンコードします。この形式は自己記述型であり、デコーダは外部スキーマ定義なしでデータを解析できます。CBORは、帯域幅と処理能力が限られたリソースであるIoTデバイスや組み込みシステムなどの制約のある環境向けに特別に設計されています。
バイナリエンコーディング構造
すべてのCBORデータ項目は、メジャータイプ(3ビット)と追加情報(5ビット)の2つのフィールドを含む1バイトで始まります。メジャータイプはデータカテゴリ(整数、文字列、配列など)を決定し、追加情報は引数の長さを示すか、小さな値を直接保持します。このコンパクトなヘッダー設計により、小さな整数のような単純な値は1バイトで済みます。
| 追加情報 | 意味 |
|---|---|
| 0-23 | 値が直接エンコード(0-23) |
| 24 | 1バイトの符号なし整数が続く |
| 25 | 2バイトの符号なし整数が続く(ビッグエンディアン) |
| 26 | 4バイトの符号なし整数が続く(ビッグエンディアン) |
| 27 | 8バイトの符号なし整数が続く(ビッグエンディアン) |
| 31 | 不定長(文字列、配列、マップ用) |
コンテナ長エンコードオプション
CBORはコンテナ(配列とマップ)の長さエンコードに柔軟性を提供します。すべての有効なエンコードは意味的に同一のデータを生成しますが、バイナリ表現は異なります。このツールは異なるシステム要件に対応する4つのエンコードモードを提供します。
エンコード例:{"name":"Alice","age":30}
同じJSONオブジェクトは複数の有効な方法でエンコードできます:
| モード | ヘッダバイト | 説明 |
|---|---|---|
| Compact | A2 ... | 0xA2 = fixmap(2)、最小エンコード |
| Explicit 16-bit | B9 00 02 ... | 0xB9 = map16、2バイト長が続く |
| Explicit 32-bit | BA 00 00 00 02 ... | 0xBA = map32、4バイト長が続く |
| Indefinite | BF ... FF | 0xBF = 不定長map、0xFFで終了 |
4つのエンコードはすべて同一のJSONにデコードされます。サイズ効率にはコンパクト、プロトコル互換性には明示的長、ストリーミングには不定長を選択してください。
CBORとJSONの比較
両形式は同じ論理データモデルを表現しますが、異なる目的に対応しています。CBORはコンパクトなエンコーディングと処理効率を優先し、JSONは人間の可読性と普遍的なテキストベースの相互運用性を重視しています。
- エンコードサイズが小さい(通常30-50%削減)
- ネイティブバイナリデータサポート
- より高速な解析とエンコード
- 日付やURIなどの組み込みセマンティックタグ
- 人間が読み書き可能
- ブラウザと言語の普遍的サポート
- デバッグとログ記録が容易
一般的な用途
- IoTデバイス通信とセンサーデータ送信
- WebAuthn/FIDO2認証プロトコル
- COSE(CBORオブジェクト署名と暗号化)セキュリティ
- CoAP(制約アプリケーションプロトコル)メッセージング
- 組み込みシステムの設定とデータストレージ
セマンティックタグ
CBORタグはデータ項目にセマンティックな意味を提供します。タグは、囲まれた値をどのように解釈すべきかを示すオプションのラッパーで、基本データ型を超えた型拡張を可能にします。
| タグ番号 | セマンティックな意味 |
|---|---|
| 0 | 標準日時文字列(RFC 3339) |
| 1 | エポックベースの日時(Unixタイムスタンプ) |
| 2 | 正のビッグナム |
| 3 | 負のビッグナム |
| 32 | URI参照 |
| 55799 | CBOR自己記述(マジックナンバー) |