データを固定長にする(アラメント/パディング)
/*
* プログラミングやネットワーク通信などでデータを固定長として扱いたいときに、
* 短いデータの前や後に無意味なデータを追加して長さを合わせる処理のことをパディングという。
* 特に足りない桁数だけ「0」を追加して長さを合わせることを「ゼロパディング」(zero padding)という。
*/
#define ALIGN4 (4) // alignment size
#define ALIGN4_MASK ~(ALIGN-1) // alignment mask
#define ALIGN_MASK(x) ~(x-1) // alignment mask(x byte)
// macro
#define _ALIGN(x, align) ( ( (x)+(align-1) ) & ALIGN_MASK(align) )
int PaddingLen;
int newLineLen = 0;
int oldLineLen = 66; /* sample data(input) */
/* アライメントの境界に揃えたデータ長を知りたい時 */
newLineLen = (( oldLineLen + (ALIGN4-1) ) & ALIGN4_MASK ); /* 4byte長にした場合は 68 */
PaddingLen = newLineLen - oldLineLen; /* Padding長は 2 */
/* こっちがベスト */
newLineLen = _ALIGN(oldLineLen, 4); /* 4byte長にした場合は 68 */
PaddingLen = newLineLen - oldLineLen; /* Padding長は 2 */