Autor
|
Tema: De minúscula a mayúscula a nivel de bits en lenguaje C. (Leído 17,357 veces)
|
DanielPy
Desconectado
Mensajes: 145
|
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).- #include <stdio.h> void binario(int); int main(void){ char cadena[6] = "daniel"; int ascii=0, i=0; while(i<6){ ascii = cadena[i]; printf("\n La letra %c en decimal %3d en binario ", cadena [i ], ascii ); binario(ascii); i++; } return 0; } void binario(int num){ int aux; if(num==0) return; aux=num%2; num=num/2; binario(num); }
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
Mensajes: 3.412
ASMático
|
Te diría que la guardes en un array de char. Si realmente quieres guardarlo en un int, haz: void binario(int num){ int temp=0; for(int i=0; num>0; i++){ temp +=(num %2) * pow(10, i ); num/=10; } }
Creo qeu así debería ir. No lo probé, eso te lo dej a ti :p
|
|
|
En línea
|
|
|
|
DanielPy
Desconectado
Mensajes: 145
|
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
Mensajes: 438
|
También podrías probar a hacerlo con uniones y campos de bit. Por ejemplo: #include <stdio.h> union caracter { unsigned char c; struct c_bits { unsigned b0:1; unsigned b1:1; unsigned b2:1; unsigned b3:1; unsigned b4:1; unsigned b5:1; unsigned b6:1; unsigned b7:1; } bits; }; int main() { union caracter cadena[]={'h','O','L','a'}; int len = sizeof(cadena)/sizeof(cadena[0]); int i; for (i=0; i<len; i++) if (cadena[i].bits.b5 == 1) printf("%c -> minuscula\n", cadena [i ]. c); else printf("%c -> mayuscula\n", cadena [i ]. c); for (i=0; i<len; i++) { cadena[i].bits.b5 = 0; } for (i=0; i<len; i++) { cadena[i].bits.b5 = 1; } return 0; }
Y su salida: 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
Mensajes: 145
|
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
Mensajes: 438
|
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: #include <stdio.h> int main() { char cadena[]="HoLaPEpe"; int len = sizeof(cadena)/sizeof(cadena[0])-1; int i; for (i=0; i<len; i++) // 0x20 es en binario = 0010 0000 if (cadena[i]&0x20) // devuelve cierto si el bit 5 esta puesto a 1 printf("%c -> minuscula\n", cadena [i ]); else printf("%c -> mayuscula\n", cadena [i ]); // 0xDF es en binario = 1101 1111 for (i=0; i<len; i++) cadena[i]&=0xDF; // pones a 0 el bit 5 printf("En mayusculas: %s\n", cadena ); for (i=0; i<len; i++) cadena[i]|=0x20; // pones a 1 el bit 5 printf("En minusculas: %s\n", cadena ); return 0; }
Y su salida: 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
Mensajes: 145
|
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
Mensajes: 438
|
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: 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=018Un saludo.
|
|
|
En línea
|
|
|
|
DanielPy
Desconectado
Mensajes: 145
|
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
Mensajes: 3.412
ASMático
|
Modificando lo que dije al principio: int binario(int num){ int temp=0; for(int i=0; num>0; i++){ temp+=(num%2) * pow(10, i); num/=2; } return temp; }
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
convertir txt a mayuscula minuscula mayuscuala...
Programación Visual Basic
|
4D1cTo
|
4
|
6,041
|
18 Junio 2006, 15:10 pm
por Hadess_inf
|
|
|
Convertir cadena minuscula en mayuscula
Programación C/C++
|
delirio
|
3
|
13,842
|
28 Noviembre 2010, 04:36 am
por delirio
|
|
|
[Python] - Ejercicio de Mayúscula y Minúscula
Python
|
ChicoMaravilla
|
2
|
12,891
|
3 Diciembre 2010, 02:17 am
por ChicoMaravilla
|
|
|
convertir minúscula a mayúscula
« 1 2 »
Programación C/C++
|
m@o_614
|
10
|
48,413
|
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,959
|
21 Marzo 2014, 02:44 am
por rir3760
|
|