izuki
5/18/2017 - 2:25 AM

データサイズを固定長にする(アラメント/パディング)

データを固定長にする(アラメント/パディング)

/*
 * プログラミングやネットワーク通信などでデータを固定長として扱いたいときに、
 * 短いデータの前や後に無意味なデータを追加して長さを合わせる処理のことをパディングという。
 * 特に足りない桁数だけ「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 */