c++

可変幅のバイトスワップ

unionに入れてひっくり返したり、マクロでセコセコとシフトしたりするのは よく見かけるけどどれも使いづらいし、バイト長毎に作ったりする必要があったりする。 unionの例 union { struct { uint8_t b4,b3,b2,b1; } b; uint32_t l; }; 使いづらい。 マクロ…

任意のビットを任意のビット幅で取得する。

ビットマスクとシフトを組み合わせて実現してみたのでメモ。 組み込みで何かする場合や、PCでもハードウェアからのデータなどビットでパッキングされたデータを扱う場合に欲しくなる。 マクロの例 普段はマクロで実現したりする。 #define GET_4BITS(v, s) (…

バイナリ列をstd::ifstreamで読み込む。

バイナリのみのデータをstd::ifstreamで読み込む時にはまったのでメモ。 # 意外とというか忘れている。。。 バイナリデータの読み込み(失敗) 例えば32bitのデータが連続している下記のようなデータがある。 test.dat 12345678 00112233 44556677 8899aabb cc…

autotoolsでmake check

テストを実行させるときにmake checkで行うという慣習があるらしく 今さらだがautotoolsでそれを組み込む方法を試してみたのでメモ。 ディレクトリ構成 . ├── Makefile.am ├── configure.ac ├── src │ └ foo.h └── test ├── Makefile.am └── foo_test.cpp sr…

boost program optionsを使ってみた。

まずはチュートリアルを読む。 基本的な使い方 基本的な使い方は以下のようになる。 オプションを定義。"help,h"は「--helpと-h」の意味。 argc, argvをパースして定義したオプションと関連付けし、variable_mapを生成。 variable_mapに、定義したオプション…

関数の入り口出口でデバッグログ

関数の入り口と出口でログ出力したいが、 1関数につき必ず2行以上ログのコードを入れる必要がある。 また、途中で抜けた場合など、ケアが難しいケースがある。 boost::scope_exit boost::scope_exitを利用する。 #include <boost/scope_exit.hpp> #define FUNC_IN_OUT_LOG \ std:</boost/scope_exit.hpp>…