este problema se puede tratar de variadas formas, pero en este caso te dejamos la que en nuestra opinión es la respuesta más completa.
Solución:
¿Algo como esto?
#include
#include
template
std::bitset bytesToBitset(uint8_t *data)
std::bitset b;
for(int i = 0; i < numBytes; ++i)
uint8_t cur = data[i];
int offset = i * CHAR_BIT;
for(int bit = 0; bit < CHAR_BIT; ++bit)
b[offset] = cur & 1;
++offset; // Move to next bit in b
cur >>= 1; // Move to next bit in array
return b;
Y un ejemplo de uso:
int main()
std::array bytes = 0xDE, 0xAD, 0xBE, 0xEF ;
auto bits = bytesToBitset(bytes.data());
std::cout << bits << std::endl;
Hay un tercer constructor para bitset<>
- no toma parámetros y establece todos los bits en 0. Creo que necesitará usar eso y luego recorrer el array vocación set()
por cada bit en el byte array eso es un 1
Un poco de fuerza bruta, pero funcionará. Habrá un poco de complejidad para convertir el índice de bytes y el desplazamiento de bits dentro de cada byte en un índice de conjunto de bits, pero no es nada que un poco de pensamiento (y tal vez una ejecución bajo el depurador) no pueda resolver. Creo que es probablemente más simple y más eficiente que tratar de ejecutar el array a través de un string conversión o una transmisión.
Chicos, he pasado mucho tiempo escribiendo una función inversa (bitset -> byte/char array). Ahí está:
bitset data = ...
// bitset to char array
char current = 0;
int offset = 0;
for (int i = 0; i < SIZE; ++i)
if (data[i]) // if bit is true
current // otherwise let it to be false
if ((i + 1) % CHAR_BIT == 0) // every 8 bits
buf[offset++] = current; // save masked value to buffer & raise offset of buffer
current = 0; // clear masked value
// now we have the result in "buf" (final size of contents in buffer is "offset")
Si conservas algún recelo o forma de desarrollar nuestro crónica te inspiramos añadir una apostilla y con placer lo leeremos.