aicodix___code/bitman.hh
2020-08-05 10:08:02 +02:00

45 lines
712 B
C++

/*
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(const uint8_t *buf, int pos)
{
return (buf[pos/8]>>(7-pos%8))&1;
}
bool get_le_bit(const uint8_t *buf, int pos)
{
return (buf[pos/8]>>(pos%8))&1;
}
}
#endif