【c/c++】バイト列からデータを取り出す
sqliteで、BLOBで格納されているデータを取り出してintやらなんやらに入れるってことをしようとした。
とりあえず、リトルエンディアン前提としてmemcpyを使う
例えばintに取り出す場合
typedef unsigned char uchar; void getValFromByteList(const uchar* src, uint16_t &dst1, int32_t &dst2) { memcpy( &dst1 , &src[0], sizeof(uint16_t)); memcpy( &dst2 , &src[2], sizeof(int32_t)); }
いくつかまとめてなら、構造体。
typedef unsigned char uchar; struct Foo { int x,y,z; }; void getValFromByteList(const uchar* src, Foo &dst) { memcpy( &dst , &src[0], sizeof(Foo)); }
で、なんとなくtemplate関数にしてみる。
template <typename T> void getValFromByteList(const unsigned char *src, T &dst, const uint32_t &from = 0) { // たぶん、ここでエンディアンを考慮するような感じにするんだろう memcpy(&dst , &src[from], sizeof(T)); }