Test Foro de elhacker.net SMF 2.1

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
Cita de: DanielC# en 22 Febrero 2015, 20:10 PM(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:
unsigned char a = ALGO;
unsigned char b = ALGO;
unsigned int r = a << CHAR_BIT | b;

/* 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.-

#include <stdio.h>
#include <limits.h>

void empacaCaracteres(char a, char b);

int main(void){
unsigned char a = 'r', b = 'd';
empacaCaracteres(a, b);

getchar();
return 0;
}

void empacaCaracteres(char a, char b){
unsigned int v = a << CHAR_BIT | b;
unsigned bits = 1U << (sizeof(unsigned) * CHAR_BIT - 1), sep=0;

printf("\n\n");
while(bits){
printf(sep %8 == 0 ? " " : "");
printf(v & bits ? "1" : "0");
sep++;
bits /=2;
}
}


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
Cita de: DanielC# en 23 Febrero 2015, 21:38 PM¿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:
while (bits){
   putchar(v & bits ? '1' : '0');
   bits >>= 1;
   
   sep++;
   if (sep % CHAR_BIT == 0)
      putchar(sep == sizeof(unsigned) * CHAR_BIT ? '\n' : ' ');
}


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
Cita de: DanielC# 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.

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)