pack_bytes()

要素データを並べてバイト列を生成します。

uint8_t* pack_bytes(uint8_t* b, uint8_t* e, ...)

pack_bytesはコンテナクラスのbegin(),end()イテレータをパラメータとし、続くパラメータで指定されるデータをバイト列としてコンテナに書き込みます。

可変引数パラメータに与えるデータは以下に示すとおりです。

データ型

バイト数

解説

uint8_t

1

uint16_t

2

ビッグエンディアン並びで格納される

uint32_t

4

ビッグエンディアン並びで格納される

uint8_t[N]

N

uint8_t 型の固定長配列

std::pair<char*,N>

N

char*,uint8_t*型の配列と配列長のペア。make_pair()で生成できる。

smplbuf_u8& pack_bytes(smplbuf_u8& c, ...)

pack_bytesはコンテナオブジェクトをパラメータとし、続くパラメータで指定されるデータをバイト列としてコンテナに書き込みます。コンテナの.push_back()メソッドで末尾に追加します。

可変引数パラメータに与えるデータは以下に示すとおりです。

データ型

バイト数

解説

uint8_t

1

uint16_t

2

ビッグエンディアン並びで格納される

uint32_t

4

ビッグエンディアン並びで格納される

uint8_t[N]

N

uint8_t 型の固定長配列

std::pair<char*,N>

N

char*,uint8_t*型の配列と配列長のペア。make_pair()で生成できる。

smplbuf_u8?

.size()

uint8_t型のsmplbuf<>コンテナ。コンテナ長(.size())のデータを格納する。

auto&& rx = the_twelite.receiver.read();

smplbuf<uint8_t, 128> buf;
mwx::pack_bytes(buf
	, uint8_t(rx.get_addr_src_lid())	// src addr (LID)
	, uint8_t(0xCC)							      // cmd id (0xCC, fixed)
	, uint8_t(rx.get_psRxDataApp()->u8Seq)	// seqence number
	, uint32_t(rx.get_addr_src_long())		// src addr (long)
	, uint32_t(rx.get_addr_dst())			// dst addr
	, uint8_t(rx.get_lqi())					  // LQI
	, uint16_t(rx.get_length())				// payload length
	, rx.get_payload() 						    // payload
);

この例では受信パケットの各属性やペイロードを別のバッファbufに再格納しています。

最終更新