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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  DUDA : Punteros a bits individuales y su manipulacion
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: DUDA : Punteros a bits individuales y su manipulacion  (Leído 5,763 veces)
lucaslopez0000

Desconectado Desconectado

Mensajes: 95


Ver Perfil WWW
DUDA : Punteros a bits individuales y su manipulacion
« en: 19 Enero 2013, 18:37 pm »

Hola a todos. He estado leyendo sobre los punteros en C y me parecen muy utiles. Pero tengo varias preguntas
1) Si tengo un int ( 32 bits ) que vale 16
en binario 00000000000000000000000000010000
¿ Puedo crear un puntero a un bit concreto para modificarlo a voluntad ?
2) ( No es una pregunta que haya leido sino experiencia propia )
Si apunto un char ( 8 bits ) en la posicion de memoria de un short int ( 16 bits )
y cambio el char , ¿ Cambiarian los 8 primeros bits del int o los 8 ultimos ?
Muchas gracias.


En línea

La manera mas simple de solucionar los problemas de windows , los virus , el spyware , la basura de microsoft en general

USA LINUX
durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: DUDA : Punteros a bits individuales y su manipulacion
« Respuesta #1 en: 19 Enero 2013, 20:12 pm »

Citar
1) Si tengo un int ( 32 bits ) que vale 16
en binario 00000000000000000000000000010000
¿ Puedo crear un puntero a un bit concreto para modificarlo a voluntad ?
hasta donde tengo entendido eso no es posible. Para modificar un bit vas a necesitar una mascara(tema: operadores de bit)


Citar
2)Si apunto un char ( 8 bits ) en la posicion de memoria de un short int ( 16 bits )
y cambio el char , ¿ Cambiarian los 8 primeros bits del int o los 8 ultimos ?
La verdad no se entiende, te referis a algo como:
Código
  1. short int *p;
  2. char a='h';
  3. p=&a;
esto daria un warning, habria que hacer un cast


Saludos

PD: nose cual es tu objetivo, pero tal vez tambien te interese el tema: campos de bit


En línea

Ahorrate una pregunta, lee el man
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: DUDA : Punteros a bits individuales y su manipulacion
« Respuesta #2 en: 19 Enero 2013, 20:37 pm »

Desde C no es posible modificar bits individuales, lo de los campos de bits no es portable entre compiladores por lo que tendrás que usar máscaras como dice durasno.Si apuntas a un short int en teoría te cambiaría los 8 últimos.Para eso puedes practicar con este código:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. char* binario(unsigned short int num)
  5. {
  6.    char *numeroBin = calloc(16,1);
  7.    char *strReturn = calloc(16,1);
  8.    for(int i = 0;num;i++)
  9.    {
  10.     numeroBin[i]=(num%2)+48;
  11.     num/=2;
  12.    }
  13.    for(int i = 16 -strlen(numeroBin);i!=0;--i)
  14.    {
  15.        strcat(strReturn,"0");
  16.    }
  17.    strcat(strReturn,strrev(numeroBin));
  18.    return strReturn;
  19. }
  20. int main(int argc, char *argv[])
  21. {
  22.    short int valor2 = 0;
  23.    char *valor =&valor2;
  24.    *valor = 0xFF;   //Aquí cambiamos la parte baja
  25.    *(valor+1)= 0x0F;//Aquí cambiamos la parte alta
  26.    printf("%s\n",binario(valor2));
  27.    return 0;
  28. }
  29.  
Un ejemplo de como hacer que se active el bit 1 y el 8 de la variable valor con la puerta lógica or.
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. char* binario(unsigned short int num)
  5. {
  6.    char *numeroBin = calloc(16,1);
  7.    char *strReturn = calloc(16,1);
  8.    for(int i = 0;num;i++)
  9.    {
  10.     numeroBin[i]=(num%2)+48;
  11.     num/=2;
  12.    }
  13.    for(int i = 16 -strlen(numeroBin);i!=0;--i)
  14.    {
  15.        strcat(strReturn,"0");
  16.    }
  17.    strcat(strReturn,strrev(numeroBin));
  18.    return strReturn;
  19. }
  20. int main(int argc, char *argv[])
  21. {
  22.    char valor = 0;
  23.    valor |= 0x81;//Activamos el primer bit y el último.
  24.    printf("Valor: %d\nBinario: %s ", valor,binario(valor);
  25.    return 0;
  26. }

Deberías echarle un vistazo a esto: http://www.bitschips.com/infoind/prg_msc.pdf

¡Saludos! :rolleyes:
« Última modificación: 19 Enero 2013, 21:22 pm por avesudra » En línea

Regístrate en
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: DUDA : Punteros a bits individuales y su manipulacion
« Respuesta #3 en: 19 Enero 2013, 21:01 pm »

En cuanto a si modifica los primeros o los ultimos bits depende del endianness de la arquitectura.

Saludos.
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: DUDA : Punteros a bits individuales y su manipulacion
« Respuesta #4 en: 19 Enero 2013, 21:17 pm »

En cuanto a si modifica los primeros o los ultimos bits depende del endianness de la arquitectura.

Saludos.
Curioso, había leído algo pero nunca sabía porqué era.
En línea

Regístrate en
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: DUDA : Punteros a bits individuales y su manipulacion
« Respuesta #5 en: 20 Enero 2013, 00:45 am »

se puede acceder a cualquier bit de un byte/WORD/... usando los operadores binarios: | , &
En línea

lucaslopez0000

Desconectado Desconectado

Mensajes: 95


Ver Perfil WWW
Re: DUDA : Punteros a bits individuales y su manipulacion
« Respuesta #6 en: 20 Enero 2013, 15:39 pm »

se puede acceder a cualquier bit de un byte/WORD/... usando los operadores binarios: | , &

Por lo que he leido esos operadores sirven para otros propositos , ¿ Como lo haces ???
Pon algun codigo

PD : Muchas gracias a todos por sus respuestas , me aclararon mucho
PD2 : Al poner etiquetas de codigo solo veo una parte del codigo ... ¿ Y eso ? No sera xq estoy navegando con el celular ¿?
En línea

La manera mas simple de solucionar los problemas de windows , los virus , el spyware , la basura de microsoft en general

USA LINUX
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: DUDA : Punteros a bits individuales y su manipulacion
« Respuesta #7 en: 20 Enero 2013, 17:13 pm »

PD2 : Al poner etiquetas de codigo solo veo una parte del codigo ... ¿ Y eso ? No sera xq estoy navegando con el celular ¿?

Tambien me pasa con el movil.
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: DUDA : Punteros a bits individuales y su manipulacion
« Respuesta #8 en: 20 Enero 2013, 17:37 pm »

Por lo que he leido esos operadores sirven para otros propositos
Supongo es una confusión al pensar en los operadores lógicos AND y OR ("&&" y "||"), estos resultan en el valor 1 o cero dependiendo si se cumple o no la condición.

Los operadores a nivel de bits AND, OR y XOR ("&", "|" y "^") permiten realizar las mentadas operaciones con valores de tipo int.

Para ejemplos nada mejor que utilizar el motor de búsqueda de los foros.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: DUDA : Punteros a bits individuales y su manipulacion
« Respuesta #9 en: 20 Enero 2013, 18:39 pm »

Luce como que no han leído ni siquiera algo básico de C/C++

Existen bastante operadores para la manipulación a nivel de bit. aunque no todos comparado con Ensamblador, este tiene aún más. en todo caso se pueden hacer implementaciónes también.
« Última modificación: 20 Enero 2013, 18:43 pm por x64Core » En línea

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

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda sobre manipulacion de memoria
Programación Visual Basic
DarkObi 1 1,689 Último mensaje 30 Diciembre 2005, 22:05 pm
por Slasher-K
Punteros ensamblador 16 bits
ASM
farresito 3 6,012 Último mensaje 29 Agosto 2010, 01:12 am
por 08l00D
manipulación de punteros (ejemplo con float)
Programación C/C++
david_BS 0 1,900 Último mensaje 3 Abril 2012, 03:26 am
por david_BS
Duda Punteros Dobles/Array de punteros
Programación C/C++
MisterJava 2 5,167 Último mensaje 30 Diciembre 2012, 20:19 pm
por MisterJava
campos de bits + punteros + macros
Programación C/C++
michael_753 1 2,594 Último mensaje 24 Octubre 2023, 14:12 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines