mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-02-01 13:00:59 +08:00
added new function reflect32
This commit is contained in:
parent
e8abcb9b23
commit
d0d6317c33
2 changed files with 18 additions and 1 deletions
|
@ -97,6 +97,22 @@ uint16_t reflect16(uint16_t b) {
|
|||
return v;
|
||||
}
|
||||
|
||||
uint32_t reflect32(uint32_t b) {
|
||||
// https://graphics.stanford.edu/~seander/bithacks.html#BitReverseTable
|
||||
uint32_t v = b; // 32-bit word to reverse bit order
|
||||
// swap odd and even bits
|
||||
v = ((v >> 1) & 0x55555555) | ((v & 0x55555555) << 1);
|
||||
// swap consecutive pairs
|
||||
v = ((v >> 2) & 0x33333333) | ((v & 0x33333333) << 2);
|
||||
// swap nibbles ...
|
||||
v = ((v >> 4) & 0x0F0F0F0F) | ((v & 0x0F0F0F0F) << 4);
|
||||
// swap bytes
|
||||
v = ((v >> 8) & 0x00FF00FF) | ((v & 0x00FF00FF) << 8);
|
||||
// swap 2-byte long pairs
|
||||
v = ( v >> 16 ) | ( v << 16);
|
||||
return v;
|
||||
}
|
||||
|
||||
void num_to_bytes(uint64_t n, size_t len, uint8_t *dest) {
|
||||
while (len--) {
|
||||
dest[len] = (uint8_t) n;
|
||||
|
@ -153,4 +169,4 @@ uint32_t rotl(uint32_t a, uint8_t n) {
|
|||
uint32_t rotr(uint32_t a, uint8_t n) {
|
||||
n &= 31;
|
||||
return (a >> n) | (a << (32 - n));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,6 +47,7 @@ void FormatVersionInformation(char *dst, int len, const char *prefix, void *vers
|
|||
uint32_t reflect(uint32_t v, int b); // used in crc.c ...
|
||||
uint8_t reflect8(uint8_t b); // dedicated 8bit reversal
|
||||
uint16_t reflect16(uint16_t b); // dedicated 16bit reversal
|
||||
uint32_t reflect32(uint32_t b); // dedicated 32bit reversal
|
||||
|
||||
void num_to_bytes(uint64_t n, size_t len, uint8_t *dest);
|
||||
uint64_t bytes_to_num(uint8_t *src, size_t len);
|
||||
|
|
Loading…
Reference in a new issue