-
#define char_t char
-
#define uint8_t unsigned char
-
#define int8_t signed char
-
#define uint16_t unsigned short
-
#define int16_t signed short
-
#define uint32_t unsigned long int
-
#define int32_t signed long int
-
-
/*
-
* param[in] SrcData: source data
-
* param[in] StartsrcBit: start source bit(1, 2, 3, ...)
-
* param[in] startdstbit: start destination bit(1, 2, 3, ...)
-
* param[in] CopyLen: copy length
-
* param[out] DstData: destination data
-
*/
-
void copy_data_by_bits(uint8_t *DstData, uint32_t startdstbit, uint8_t *SrcData, uint32_t StartsrcBit, uint32_t CopyLen)
-
{
-
uint32_t copysrcbyte = 0;
-
uint32_t copysrcbitofbyte = 0;
-
uint32_t copydstbyte = 0;
-
uint32_t copydstbitofbyte = 0;
-
uint32_t dataLen = CopyLen;
-
-
if ((NULL == SrcData) || (NULL == DstData)) {
-
printf("SrcData or DstData is NULL !!!\n");
-
return;
-
}
-
-
while (dataLen > 0) {
-
copydstbyte = ((startdstbit + dataLen) / 8);
-
copydstbitofbyte = ((startdstbit + dataLen) % 8);
-
copysrcbyte = ((StartsrcBit + dataLen) / 8);
-
copysrcbitofbyte = ((StartsrcBit + dataLen) % 8);
-
-
if (0 == copysrcbitofbyte) {
-
copysrcbitofbyte = 8;
-
copysrcbyte = copysrcbyte - 1;
-
}
-
-
if (0 == copydstbitofbyte) {
-
copydstbitofbyte = 8;
-
copydstbyte = copydstbyte - 1;
-
}
-
-
DstData[copydstbyte] &= ~(1 << (copydstbitofbyte - 1));
-
if ((SrcData[copysrcbyte] & ((uint8_t)((uint8_t)1 << (copysrcbitofbyte - 1)))) != 0) {
-
DstData[copydstbyte] |= ((uint8_t)1 << (copydstbitofbyte - 1));
-
}
-
dataLen--;
-
}
-
}