2011-02-03 43 views
6

¿hay una manera simple de convertir un personaje a su representación binaria?cómo convertir un char a binario?

Estoy tratando de enviar un mensaje a otro proceso, un bit a la vez. Entonces, si el mensaje es "Hola", primero tengo que convertir "H" en binario, y luego enviar los bits en orden.

Se prefiere almacenar en una matriz.

Gracias por cualquier comentario, ya sea pseudocódigo o código real sería el más útil.

Creo que debo mencionar que esto es para una tarea escolar para aprender sobre señales ... es solo una forma interesante de aprender sobre ellas. SIGUSR1 se usa como 0, SIGUSR2 se usa como 1, y el punto es enviar un mensaje de un proceso a otro, simulando que el entorno está bloqueando otros métodos de comunicación.

+0

Podría dar un ejemplo de lo que espera para ser enviados en realidad? –

+0

¿Desea enviar solo un solo dígito binario a la vez? ¿Por qué? –

+0

Bueno, es con señales en realidad ... todo lo que necesito es la representación binaria de un personaje. así que tal vez proporcione una matriz int, y mediante alguna función, se convierte en el binario. entonces puedo recorrer la matriz y enviar cada bit. Esto es como un ejercicio de pensamiento fuera de lo común. – Blackbinary

Respuesta

14

Solo tiene que hacer un ciclo para cada bit hacer un cambio y hacer una lógica AND para obtener el bit.

for (int i = 0; i < 8; ++i) { 
    send((mychar >> i) & 1); 
} 

Por ejemplo:

unsigned char mychar = 0xA5; // 10100101 

(mychar >> 0) 10100101 
& 1   & 00000001 
============= 00000001 (bit 1) 

(mychar >> 1) 01010010 
& 1   & 00000001 
============= 00000000 (bit 0) 

y así sucesivamente ...

+0

Debe hacer esa 'char sin signo' o bien asegurarse de que el valor sea siempre positivo, ya que el resultado de' >> 'tiene un valor definido por la implementación para los operandos negativos. –

+0

¡Revisado! Gracias a tu. –

3

¿Qué hay de:

int output[CHAR_BIT]; 
char c; 
int i; 
for (i = 0; i < CHAR_BIT; ++i) { 
    output[i] = (c >> i) & 1; 
} 

que escribe los bits de c en output, el bit menos significativo en primer lugar.

+0

que es exactamente lo que quiero, lo probaré. – Blackbinary