Umm... no se como no lo he pensado xD. Perdon por haberte hecho escribir tanto, y gracias por las respuestas. En cuanto a las mascaras, creia que te referias a los valores hexadecimales, ya conocia los operadores de bits.
Saludos.
Saludos.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúCita de: xiruko en 23 Octubre 2012, 23:43 PM
una pregunta que es lo que quieres hacer exactamente? modificar los bits de un byte? esto se suele hacer aplicando mascaras al byte. por ejemplo, si tienes un byte inicial:a = 10000001
y quieres poner a 0 el MSB para que quede asi:b = 00000001
lo que deberias hacer es aplicar la siguiente mascara:b = a & 0x7F
con lo que estarias poniendo a 0 el bit mas significativo, y dejando igual a los demas. si ahora quisieras volver a ponerlo a 1, deberias aplicar la siguiente mascara:c = b | 0x80
lo digo porque no creo que hagan falta librerias externas y demas para acceder a los bits, ya que con los operadores que trae hay mas que suficiente para muchisimas aplicaciones. si tienes alguna pregunta ya diras...
espero que te sirva de ayuda, un saludo!
Cita de: rir3760 en 23 Octubre 2012, 17:50 PM
El desplazamiento dentro del byte depende de como lo interpretes lo usual es no hacerlo. Esa función se puede acortar un poco. Por ejemplo:#include <stdio.h>
#include <stdlib.h> /* div_t, div */
#include <limits.h> /* CHAR_BIT */
_Bool bit(unsigned char *a, int pos);
int main(void)
{
unsigned char test = 131;
int i;
for (i = CHAR_BIT - 1; i >= 0; i--)
printf("%2d", i);
putchar('\n');
for (i = CHAR_BIT - 1; i >= 0; i--)
printf("%2d", bit(&test, i));
putchar('\n');
return EXIT_SUCCESS;
}
_Bool bit(unsigned char *a, int pos)
{
div_t d = div(pos, CHAR_BIT); /* .quot = byte, .rem = bit */
return a[d.quot] >> d.rem & 1;
}
Y su salida (con lo usual, ocho bits por byte) es:7 6 5 4 3 2 1 0
1 0 0 0 0 0 1 1
Otra opción es utilizar directamente los operadores de división y modulo.
Un saludo
_Bool bit(char *a, int b)
{
int index = (b/8)-1;
if(b%8) index++;
if((a[index]>>(8-(b%8)))%2) return true;
return false;
}
Cita de: ankora45 en 23 Octubre 2012, 12:13 PM
Hola, puedes crear una cadena char menu[50]y pasarle a switch(menu[0])
asi lee solo el primer caracter asi si pones asdf siempre te lleva al defaul sin pasar por todas las letras
temp=999999999;
#include <stdlib.h>
int main()
{
setenv("LD_PRELOAD", "/home/user/libprueba.so", 1);
system("echo $LD_PRELOAD");
return 0;
}
$ gcc prueba.c -o prueba
./prueba
/home/user/libprueba.so //Hasta aqui bien
//Ahora saco por pantalla esta variable
echo $LD_PRELOAD
//En esta linea no sale nada, la variable ha cambiado su valor a 0 :(
$
Cita de: $Edu$ en 21 Octubre 2012, 18:55 PM
Concluyendo te digo que si buscaste en internet y encontraste que decian en C/C++ es porque son los mas comunes a usar en "virus" o troyanos porque no dependen de ninguna plataforma, son multiplataforma, correran en Linux como en Windows. Sin embargo Batch es solo para Windows, y los demas necesitan su maquina virtual instalada en el sistema operativo para que corran los programas con esos lenguajes, asi como VB.NET que necesitara que tengas instalado el NetFramework en tu pc, cosa que los windows nuevos ya tienen el ultimo NetFramework, por lo que no habria problemas, pero si es corrido en Linux ya no funcionaria.