added bit manipulation helpers

This commit is contained in:
Ahmet Inan 2018-09-22 19:13:37 +02:00
commit abe4edc419
2 changed files with 49 additions and 0 deletions

View file

@ -31,6 +31,10 @@ Here a [Pseudorandom number generator](https://en.wikipedia.org/wiki/Pseudorando
When dealing with unaligned and arbitrary-bit-sized elements in a data stream, the bitwise stream container might help avoiding some headaches.
### [bitman.hh](bitman.hh)
Simple bit manipulation on byte arrays.
### [galois_field.hh](galois_field.hh)
We have to thank [Évariste Galois](https://en.wikipedia.org/wiki/%C3%89variste_Galois) for his contribution of the [Finite field](https://en.wikipedia.org/wiki/Finite_field) to mathematics, which laid the cornerstone for a variety of applications that we take for granted today.

45
bitman.hh Normal file
View file

@ -0,0 +1,45 @@
/*
Bit manipulation of byte arrays
Copyright 2018 Ahmet Inan <inan@aicodix.de>
*/
#ifndef BITMAN_HH
#define BITMAN_HH
namespace CODE {
void xor_be_bit(uint8_t *buf, int pos, bool val)
{
buf[pos/8] ^= val<<(7-pos%8);
}
void xor_le_bit(uint8_t *buf, int pos, bool val)
{
buf[pos/8] ^= val<<(pos%8);
}
void set_be_bit(uint8_t *buf, int pos, bool val)
{
buf[pos/8] = (~(1<<(7-pos%8))&buf[pos/8])|(val<<(7-pos%8));
}
void set_le_bit(uint8_t *buf, int pos, bool val)
{
buf[pos/8] = (~(1<<(pos%8))&buf[pos/8])|(val<<(pos%8));
}
bool get_be_bit(uint8_t *buf, int pos)
{
return (buf[pos/8]>>(7-pos%8))&1;
}
bool get_le_bit(uint8_t *buf, int pos)
{
return (buf[pos/8]>>(pos%8))&1;
}
}
#endif