8个仅由0和1组成的数组合并为一个字节:
//----------- 数乘法 ------------
bool UTI::Encode8ByteTo1Byte(BYTE *in_bitBuf, DWORD in_Len, BYTE* out_byteBuf , DWORD out_Size)
{
if (out_Size < in_Len / 8) {
return false;
}
int times = in_Len / 8;
int j = 0;
BYTE tmp = 0;
for (int i = 0; i < times; i++) {
for (j = 0; j < 7; j++) {
tmp = (tmp + in_bitBuf[i * 8 + j]) * 2;
}
//2的0次方不方便套入上面的公式,单独拎出来
out_byteBuf[i] = tmp + in_bitBuf[i * 8 + 7];
}
return true;
}
//----------- 移位法 ------------
bool UTI::Encode8ByteTo1Byte(BYTE *in_bitBuf, DWORD in_Len, BYTE* out_byteBuf , DWORD out_Size)
{
if (out_Size < in_Len / 8) {
return false;
}
int times = in_Len / 8;
int j = 0;
BYTE tmp = 0;
for (int i = 0; i < times; i++) {
tmp = 0;
for (j = 0; j < 8; j++) {
tmp = tmp | (in_bitBuf[i * 8 + j] << (8 - 1 - j));
}
out_byteBuf[i] = tmp;
}
return true;
}