Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DanielPy en 22 Febrero 2015, 20:10 pm



Título: Empacar dos caracteres en una variable entera unsigned. [C]
Publicado por: DanielPy en 22 Febrero 2015, 20:10 pm
Hola a todos.
Creo que es la primera vez que los consulto y no puedo mostrar ningún avance, bueno debo aclarar que estoy desconcertado y no sé por dónde comenzar y les soy sincero al decir que ni siquiera pude buscar en la web.-
Dejo el enunciado y espero que puedan ayudarme con teoría o con algún ej.-    

(http://i62.tinypic.com/2r2x8ph.png)

Saludos.
Daniel


Título: Re: Empacar dos caracteres en una variable entera unsigned. [C]
Publicado por: engel lex en 22 Febrero 2015, 20:23 pm
el entero lo haces igual al char 1 desplazado tantos bits como tiene char
variable_int = variable_char_1<<sizeof(char)

luego al entero le sumas el otro char
variable_int = variable_int + variable_char_2


Título: Re: Empacar dos caracteres en una variable entera unsigned. [C]
Publicado por: rir3760 en 23 Febrero 2015, 03:15 am
(http://i62.tinypic.com/2r2x8ph.png)
Es relativamente fácil, todas las variables a utilizar deben ser sin signo y la operación para empaquetar los caracteres es:
Código
  1. unsigned char a = ALGO;
  2. unsigned char b = ALGO;
  3. unsigned int r = a << CHAR_BIT | b;
  4.  
  5. /* Impresion bit por bit de la variable r */

Como imprimir una variable bit por bit es algo que ya se trato en uno de tus otros temas.

Un saludo


Título: Re: Empacar dos caracteres en una variable entera unsigned. [C]
Publicado por: DanielPy en 23 Febrero 2015, 21:38 pm
Hola.
engel lex, me ocurrió algo inusual con tu respuesta, cuando la leí por primera vez tenía unos ej. Que luego (de ver el partido de la selección Argentina) desaparecieron y me apareció mi post modificado (por vos) y realmente no le encuentro diferencia con el original.
rir3760, ¿me podrías decir si mi programa tiene que ver con el enunciado?  .-
Tan sólo me faltaría que alguien me diga en la práctica, ¿de qué forma se puede aplicar el empaquetado de caracteres?.-
Gracias a todos por el tiempo.-

Código
  1. #include <stdio.h>
  2. #include <limits.h>
  3.  
  4. void empacaCaracteres(char a, char b);
  5.  
  6. int main(void){
  7. unsigned char a = 'r', b = 'd';
  8. empacaCaracteres(a, b);
  9.  
  10. return 0;
  11. }
  12.  
  13. void empacaCaracteres(char a, char b){
  14. unsigned int v = a << CHAR_BIT | b;
  15. unsigned bits = 1U << (sizeof(unsigned) * CHAR_BIT - 1), sep=0;
  16.  
  17. printf("\n\n");
  18. while(bits){
  19. printf(sep %8 == 0 ? " " : "");
  20. printf(v & bits ? "1" : "0");
  21. sep++;
  22. bits /=2;
  23. }
  24. }

Saludos.
Daniel


Título: Re: Empacar dos caracteres en una variable entera unsigned. [C]
Publicado por: crack81 en 23 Febrero 2015, 21:42 pm
Olle daniel desde un tiempo he visto tus dudas y me gustaria saber que curso estas siguiendo o donde estas encontrando esos ejercicios

si los compartes seria fabuloso
saludos...


Título: Re: Empacar dos caracteres en una variable entera unsigned. [C]
Publicado por: DanielPy en 23 Febrero 2015, 22:08 pm
Hola crack81.
Te dejo la imagen de la tapa.-

(http://i57.tinypic.com/20jiv4x.png)

Saludos.
Daniel


Título: Re: Empacar dos caracteres en una variable entera unsigned. [C]
Publicado por: rir3760 en 24 Febrero 2015, 04:16 am
¿me podrías decir si mi programa tiene que ver con el enunciado?
Tu programa realiza la operación indicada de forma correcta, solo una recomendación: no utilices la función printf para imprimir una cadena vacía. En su lugar puedes utilizar un condicional para imprimir el espacio o bien ya que se trata de imprimir un solo carácter puedes usar la función putchar y el operador condicional, de esta forma:
Código
  1. while (bits){
  2.   putchar(v & bits ? '1' : '0');
  3.   bits >>= 1;
  4.  
  5.   sep++;
  6.   if (sep % CHAR_BIT == 0)
  7.      putchar(sep == sizeof(unsigned) * CHAR_BIT ? '\n' : ' ');
  8. }

Un saludo


Título: Re: Empacar dos caracteres en una variable entera unsigned. [C]
Publicado por: engel lex en 24 Febrero 2015, 04:44 am
Hola.
engel lex, me ocurrió algo inusual con tu respuesta, cuando la leí por primera vez tenía unos ej. Que luego (de ver el partido de la selección Argentina) desaparecieron y me apareció mi post modificado (por vos) y realmente no le encuentro diferencia con el original.

jaja algunas veces corrijo detallitos en imagenes y no aviso  :)

lo que hice fue modificar tu imagen agregando el parametro " width=600" luego del img para que la imagen no se viera tan grande, sin eso se ve así

(http://i62.tinypic.com/2r2x8ph.png)