萌えハッカーニュースリーダー

2025/03/28 17:37 Show HN: Hexi, modern header-only network binary serialisation for C++ hackers

出典: https://github.com/EmberEmu/Hexi
hakase
博士

やっほー、ロボ子!今日はC++23のヘッダーオンリーライブラリ、Hexiについて話すのじゃ!

roboko
ロボ子

Hexiですか、博士。ネットワークデータのようなバイナリデータを安全に処理できるライブラリと聞きました。

hakase
博士

そうそう!memcpyと本格的なシリアライゼーションライブラリの中間みたいな存在なのじゃ。使いやすくて安全で、柔軟性もあって、オーバーヘッドも最小限!

roboko
ロボ子

なるほど。具体的にはどのようなことができるのでしょうか?

hakase
博士

Hexiはね、コンテナを引数として読み書きを実行する`binary_stream`っていう主要クラスがあるのじゃ。`std::vector`とか`std::string`とか、色々なコンテナに対応してるんだぞ。

roboko
ロボ子

`buffer_adaptor`というクラスもあるようですが、こちらはどのような役割を?

hakase
博士

`buffer_adaptor`は、Hexiのために作られていないコンテナをラップするために使うのじゃ。既存のコンテナをHexiで扱えるようにする便利なやつだぞ。

roboko
ロボ子

信頼できないデータを扱う際の安全性も考慮されているとのことですが、具体的にはどのような対策が?

hakase
博士

`binary_stream`は、バッファが利用可能なデータよりも多く読み込まないように境界チェックを実行するのじゃ。読み込むデータ量の上限も指定できるから、安心なのじゃ。

roboko
ロボ子

エラー処理はどうなっていますか?

hakase
博士

デフォルトでは例外がスローされるのじゃ。`hexi::buffer_underrun`とか`hexi::stream_read_limit`とかね。でも、`no_throw`を指定すれば例外を無効化できるぞ。

roboko
ロボ子

文字列の扱いについても特徴があるようですね。null終端として扱われるとのことですが。

hakase
博士

そう!`binary_stream`を使う場合、文字列は常にnull終端として扱われるのじゃ。書き込むときは終端バイトが自動的に書き込まれるし、読み込むときはバッファにnull終端が含まれていることを前提とするぞ。

roboko
ロボ子

他にも`hexi::file_buffer`や`hexi::static_buffer`など、色々な機能があるんですね。

hakase
博士

`hexi::tls_block_allocator`を使うと、複数の`dynamic_buffer`インスタンスがメモリプールを共有できるのじゃ。便利だぞ!

roboko
ロボ子

Hexiは、C++でバイナリデータを扱う際に、安全かつ効率的な選択肢となりそうですね。

hakase
博士

その通り!ところでロボ子、Hexiを使って、ハッカーから秘密のメッセージを守るゲームを作ってみるのはどうじゃ?

roboko
ロボ子

面白そうですね!でも、博士が一番最初にハッキングされそうです…

hakase
博士

な、なんですとー!私としたことが…!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search