elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  De minúscula a mayúscula a nivel de bits en lenguaje C.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 4 Ir Abajo Respuesta Imprimir
Autor Tema: De minúscula a mayúscula a nivel de bits en lenguaje C.  (Leído 15,707 veces)
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
De minúscula a mayúscula a nivel de bits en lenguaje C.
« en: 31 Diciembre 2013, 00:42 am »

Hola a todos.
Estoy como siempre estudiando y practicando en este caso con punteros y ya logre el programa restando 32 al ascii de la letra minúscula para pasarla a mayúscula, ahora lo que quiero hacer es lo mismo pero intercambiando el sexto bit, como ya se sabe si el sexto bit está encendido la letra es minúscula y si está apagado es mayúscula.-
La primer ayuda que les pido es: ¿cómo debo  hacer para guardar el número binario en una variable del tipo int? (línea 32).-

Código
  1. #include <stdio.h>
  2.  
  3. void binario(int);
  4.  
  5. int main(void){
  6.  
  7. char cadena[6] = "daniel";
  8. int ascii=0, i=0;
  9.  
  10.  
  11. while(i<6){
  12. ascii = cadena[i];
  13. printf("\n La letra %c en decimal %3d en binario ", cadena[i], ascii);
  14. binario(ascii);
  15. i++;
  16. }
  17.  
  18. printf("\n\n");
  19.  
  20. return 0;
  21. }
  22.  
  23. void binario(int num){
  24. int aux;
  25.  
  26. if(num==0)
  27.      return;
  28.  
  29. aux=num%2;
  30. num=num/2;
  31. binario(num);
  32. printf("%d",aux);
  33. }

Desde ya muchas gracias y feliz 2014.-
Saludos.
Daniel



En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: De minúscula a mayúscula a nivel de bits en lenguaje C.
« Respuesta #1 en: 31 Diciembre 2013, 00:53 am »

Te diría que la guardes en un array de char. Si realmente quieres guardarlo en un int, haz:
Código
  1. void binario(int num){
  2.    int temp=0;
  3.    for(int i=0; num>0; i++){
  4.        temp+=(num%2) * pow(10, i);
  5.        num/=10;
  6.    }
  7. }

Creo qeu así debería ir. No lo probé, eso te lo dej a ti :p


En línea

DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: De minúscula a mayúscula a nivel de bits en lenguaje C.
« Respuesta #2 en: 31 Diciembre 2013, 02:59 am »

Hola ivancea96.
Me parece muy buena la idea pero no me funciona, seguiremos investigando.-

Saludos.
Daniel


En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: De minúscula a mayúscula a nivel de bits en lenguaje C.
« Respuesta #3 en: 31 Diciembre 2013, 03:39 am »

También podrías probar a hacerlo con uniones y campos de bit. Por ejemplo:

Código
  1. #include <stdio.h>
  2.  
  3. union caracter
  4. {
  5. unsigned char c;
  6. struct c_bits
  7. {
  8. unsigned b0:1;
  9. unsigned b1:1;
  10. unsigned b2:1;
  11. unsigned b3:1;
  12. unsigned b4:1;
  13. unsigned b5:1;
  14. unsigned b6:1;
  15. unsigned b7:1;
  16. } bits;
  17. };
  18.  
  19. int main()
  20. {
  21. union caracter cadena[]={'h','O','L','a'};
  22. int len = sizeof(cadena)/sizeof(cadena[0]);
  23. int i;
  24.  
  25. for (i=0; i<len; i++)
  26. if (cadena[i].bits.b5 == 1)
  27. printf("%c -> minuscula\n", cadena[i].c);
  28. else
  29. printf("%c -> mayuscula\n", cadena[i].c);
  30.  
  31. printf("En mayusculas: ");
  32. for (i=0; i<len; i++)
  33. {
  34. cadena[i].bits.b5 = 0;
  35. printf("%c", cadena[i].c);
  36. }
  37. printf("\n");
  38.  
  39. printf("En minusculas: ");
  40. for (i=0; i<len; i++)
  41. {
  42. cadena[i].bits.b5 = 1;
  43. printf("%c", cadena[i].c);
  44. }
  45. printf("\n");
  46.  
  47. return 0;
  48. }

Y su salida:

Código:
xiruko:~$ gcc prueba.c -o prueba
xiruko:~$ ./prueba
h -> minuscula
O -> mayuscula
L -> mayuscula
a -> minuscula
En mayusculas: HOLA
En minusculas: hola
xiruko:~$

Saludos.
En línea

DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: De minúscula a mayúscula a nivel de bits en lenguaje C.
« Respuesta #4 en: 31 Diciembre 2013, 03:50 am »

Hola xiruko.
Muchas gracias, muy pero muy interesante tú código, lo voy a estudiar sólo que me temo que sea un poco avanzado para mis conocimientos.-
 
Saludos.
Daniel

En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: De minúscula a mayúscula a nivel de bits en lenguaje C.
« Respuesta #5 en: 31 Diciembre 2013, 03:58 am »

De nada. Pensándolo un poco mejor también se podría hacer con máscaras y operaciones a nivel de bit. Te dejo también el código:

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. char cadena[]="HoLaPEpe";
  6. int len = sizeof(cadena)/sizeof(cadena[0])-1;
  7. printf("len = %d\n", len);
  8. int i;
  9.  
  10. for (i=0; i<len; i++)
  11. // 0x20 es en binario = 0010 0000
  12. if (cadena[i]&0x20) // devuelve cierto si el bit 5 esta puesto a 1
  13. printf("%c -> minuscula\n", cadena[i]);
  14. else
  15. printf("%c -> mayuscula\n", cadena[i]);
  16.  
  17. // 0xDF es en binario = 1101 1111
  18. for (i=0; i<len; i++) cadena[i]&=0xDF; // pones a 0 el bit 5
  19. printf("En mayusculas: %s\n", cadena);
  20.  
  21. for (i=0; i<len; i++) cadena[i]|=0x20; // pones a 1 el bit 5
  22. printf("En minusculas: %s\n", cadena);
  23.  
  24. return 0;
  25. }

Y su salida:

Código:
xiruko:~$ gcc prueba2.c -o prueba2
xiruko:~$ ./prueba2
H -> mayuscula
o -> minuscula
L -> mayuscula
a -> minuscula
P -> mayuscula
E -> mayuscula
p -> minuscula
e -> minuscula
En mayusculas: HOLAPEPE
En minusculas: holapepe
xiruko:~$

Un saludo.

Edito: que puse al revés las máscaras... ahora ya funciona correctamente.

Felices fiestas.

« Última modificación: 31 Diciembre 2013, 04:27 am por xiruko » En línea

DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: De minúscula a mayúscula a nivel de bits en lenguaje C.
« Respuesta #6 en: 31 Diciembre 2013, 04:10 am »

Hola  xiruko.
Esto último es exactamente lo que buscaba.-
Cuando tengas un rato libre por favor explicame &0x20, 0x20 y &=0xDF.-

Saludos.
Daniel

En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: De minúscula a mayúscula a nivel de bits en lenguaje C.
« Respuesta #7 en: 31 Diciembre 2013, 04:28 am »

Partiendo de que 1 AND 0 = 0 y que 1 OR 0 = 1, el operador '&' es el AND a nivel de bit y el '|' el OR, y la operación se lleva a cabo entre bits que ocupen la mismas posiciones en los dos operandos. Por si no quedó del todo claro te dejo unos ejemplos:

Código:
num = 1100
num & 0100 = 0100
num & 1111 = num
num | 1001 = 1101
num | 0000 = num

Si quieres profundizar aquí tienes una explicación más detallada: http://c.conclase.net/curso/?cap=018

Un saludo.
En línea

DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: De minúscula a mayúscula a nivel de bits en lenguaje C.
« Respuesta #8 en: 31 Diciembre 2013, 14:38 pm »

Hola  xiruko.
Muchas gracias por el tiempo y muy completa explicación, solo me encontré con algo que no puedo resolver (en mayúscula).-



Saludos.
Daniel

En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: De minúscula a mayúscula a nivel de bits en lenguaje C.
« Respuesta #9 en: 31 Diciembre 2013, 15:45 pm »

Modificando lo que dije al principio:

Código
  1. int binario(int num){
  2.    int temp=0;
  3.    for(int i=0; num>0; i++){
  4.        temp+=(num%2) * pow(10, i);
  5.        num/=2;
  6.    }
  7.    return temp;
  8. }

Cambiando la función de void a int, haciendo que retorne "temp", y cambiando num/=10; por "num/=2;". Eso fue un fallo mio.
En línea

Páginas: [1] 2 3 4 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
convertir txt a mayuscula minuscula mayuscuala...
Programación Visual Basic
4D1cTo 4 5,769 Último mensaje 18 Junio 2006, 15:10 pm
por Hadess_inf
Convertir cadena minuscula en mayuscula
Programación C/C++
delirio 3 13,446 Último mensaje 28 Noviembre 2010, 04:36 am
por delirio
[Python] - Ejercicio de Mayúscula y Minúscula
Scripting
ChicoMaravilla 2 12,514 Último mensaje 3 Diciembre 2010, 02:17 am
por ChicoMaravilla
convertir minúscula a mayúscula « 1 2 »
Programación C/C++
m@o_614 10 47,323 Último mensaje 24 Abril 2017, 12:31 pm
por NikNitro!
De minúscula a mayúscula a nivel de bits (lenguaje C.)
Programación C/C++
NOB2014 4 3,564 Último mensaje 21 Marzo 2014, 02:44 am
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines