mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-14 10:37:23 -07:00
Refactor the concatbits function to support both MSB and LSB first src
This commit is contained in:
parent
02511e06f6
commit
d13e7b0b64
5 changed files with 41 additions and 32 deletions
|
@ -555,9 +555,13 @@ void reverse_arraybytes_copy(uint8_t *arr, uint8_t *dest, size_t len) {
|
|||
}
|
||||
|
||||
// TODO: Boost performance by copying in chunks of 1, 2, or 4 bytes when feasible.
|
||||
size_t concatbits(uint8_t *dest, int dest_offset, const uint8_t *src, int src_offset, size_t nbits) {
|
||||
/**
|
||||
* @brief Concatenate bits from src to dest, bitstream is stored MSB first
|
||||
* which means that the dest_offset=0 is the MSB of the dest[0]
|
||||
*
|
||||
*/
|
||||
size_t concatbits(uint8_t *dest, int dest_offset, const uint8_t *src, int src_offset, size_t nbits, bool src_lsb) {
|
||||
int i, end, step;
|
||||
|
||||
// overlap
|
||||
if ((src - dest) * 8 + src_offset - dest_offset > 0) {
|
||||
i = 0;
|
||||
|
@ -571,8 +575,8 @@ size_t concatbits(uint8_t *dest, int dest_offset, const uint8_t *src, int src_of
|
|||
|
||||
for (; i != end; i += step) {
|
||||
// equiv of dest_bits[dest_offset + i] = src_bits[src_offset + i]
|
||||
CLEAR_BIT(dest, dest_offset + i);
|
||||
if (TEST_BIT(src, src_offset + i)) SET_BIT(dest, dest_offset + i);
|
||||
CLEAR_BIT_MSB(dest, dest_offset + i);
|
||||
if (src_lsb ? TEST_BIT_LSB(src, src_offset + i) : TEST_BIT_MSB(src, src_offset + i)) SET_BIT_MSB(dest, dest_offset + i);
|
||||
}
|
||||
|
||||
return dest_offset + nbits;
|
||||
|
|
|
@ -150,7 +150,7 @@ bool hexstr_to_byte_array(const char *hexstr, uint8_t *d, size_t *n);
|
|||
void reverse_arraybytes(uint8_t *arr, size_t len);
|
||||
void reverse_arraybytes_copy(uint8_t *arr, uint8_t *dest, size_t len);
|
||||
|
||||
size_t concatbits(uint8_t *dest, int dest_offset, const uint8_t *src, int src_offset, size_t nbits);
|
||||
size_t concatbits(uint8_t *dest, int dest_offset, const uint8_t *src, int src_offset, size_t nbits, bool src_lsb);
|
||||
int char2int(char c);
|
||||
int hexstr2ByteArr(const char *hexstr, unsigned char *array, size_t asize);
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue