M
M
MWX Library
検索…
Byte array utils

読み出し

バイト配列から、uint8_t, ビッグエンディアン並びとして、uint16_t, uint32_t の値を取得する。
1
inline uint8_t G_OCTET(const uint8_t*& p) {
2
return *(p)++;
3
}
4
inline uint16_t G_WORD(const uint8_t*& p) {
5
uint32_t r = *p++;
6
r = (r << 8) + *p++;
7
return r;
8
}
9
inline uint32_t G_DWORD(const uint8_t*& p) {
10
uint32_t r = *p++;
11
r = (r << 8) + *p++;
12
r = (r << 8) + *p++;
13
r = (r << 8) + *p++;
14
return r;
15
}
Copied!
p は読み出したバイト数分だけインクリメントされる。

書き込み

ポインタqで指定するバイト配列にuint8_t,ビッグエンディアンでuint16_t,uint32_tの値を書き込む。
1
inline uint8_t& S_OCTET(uint8_t*& q, uint8_t c) {
2
*q++ = c;
3
return *q;
4
}
5
inline uint8_t& S_WORD(uint8_t*& q, uint16_t c) {
6
*(q) = ((c) >> 8) & 0xff; (q)++;
7
*(q) = ((c) & 0xff); (q)++;
8
return *q;
9
}
10
inline uint8_t& S_DWORD(uint8_t*& q, uint32_t c) {
11
*(q) = ((c) >> 24) & 0xff; (q)++;
12
*(q) = ((c) >> 16) & 0xff; (q)++;
13
*(q) = ((c) >> 8) & 0xff; (q)++;
14
*(q) = ((c) & 0xff); (q)++;
15
return *q;
16
}
Copied!
q は書き込んだバイト数分だけインクリメントされる。

背景

無線パケットのデータペイロードの生成・分解時の操作を簡略化するため。
より簡略化したpack_bytes(), expand_bytes()も利用できます。
最終更新 1yr ago
PDFに出力
リンクのコピー