Autor Tema: Variables Binarias C#  (Leído 8046 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Palomino86

  • PIC16
  • ***
  • Mensajes: 180
Variables Binarias C#
« en: 12 de Julio de 2010, 16:26:23 »
Que tal?

Quisiera saber si en C# se puede realizar el siguiente movimiento:

Supongamos que tenemos una variable tipo byte y en ella quiero meter un numero binario; para despues partirlo en en 8 bits. Esto lo hago perfectamente en lenguaje basic de microcontroladores pero quisiera saber si hay una forma de hacerlo aqui en C#.

 Saludos :shock: :?
Lo que no me destruye, me fortalece

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Variables Binarias C#
« Respuesta #1 en: 12 de Julio de 2010, 19:44:09 »
pues de entrada te diria que si, aunque tendria que explicarme un poco mas tu necesidad.

Por ahora voy con esto a ver si te resulta.

Tu tienes una variable tipo BYTE y lo que quieres es a partir de esa tener ocho variables tipo BOOL, o ocho variables BYTE pero que sean 1 o 0.

Pues yo hago eso con una máscara y lo uso cuando tengo una variable que la uso como registro de banderas (flags).

Código: [Seleccionar]
byte variable_byte;
byte variable_0bit;
byte variable_1bit;
byte variable_2bit;
byte variable_3bit;
byte variable_4bit;
byte variable_5bit;
byte variable_6bit;
byte variable_7bit;

if((variable_byte & 0x01) == 0x01){variable_0bit = 1;}
else{variable_0bit = 0;}

if((variable_byte & 0x02) == 0x02){variable_1bit = 1;}
else{variable_1bit = 0;}

if((variable_byte & 0x04) == 0x04){variable_2bit = 1;}
else{variable_2bit = 0;}

if((variable_byte & 0x08) == 0x08){variable_3bit = 1;}
else{variable_3bit = 0;}

if((variable_byte & 0x10) == 0x10){variable_4bit = 1;}
else{variable_4bit = 0;}

if((variable_byte & 0x20) == 0x20){variable_5bit = 1;}
else{variable_5bit = 0;}

if((variable_byte & 0x40) == 0x40){variable_6bit = 1;}
else{variable_6bit = 0;}

if((variable_byte & 0x80) == 0x80){variable_7bit = 1;}
else{variable_7bit = 0;}

Y para setear o limpiar cada uno de los bits del registro de banderas, por ejemplo para el 2 bit:

Código: [Seleccionar]
variable_byte |= 0x02;  // Setea el segundo bit
variable_byte &= 0xFD;  // Limpia el segundo bit

Espero te sirva, yo lo uso así y me funciona, si alguien sabe de una forma mas simple por favor que avise ;-)
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Variables Binarias C#
« Respuesta #2 en: 12 de Julio de 2010, 21:16:28 »
Creo que es la forma normal de hacerlo. Para agilizarlo se podría hacer un arreglo de Booleans e insertarlos en un ciclo for.

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Variables Binarias C#
« Respuesta #3 en: 12 de Julio de 2010, 23:01:36 »
si como dices el arreglo de booleans y el ciclo for vendria bien para pasar todas de un solo saque.
Por lo general yo uso esto como flag, asi que voy chequeando de a un bit en distintas partes del programa.

No he encontrado otra forma, quizas la haya, pero me ha parecido la mas eficiente hasta ahora. :mrgreen:

Saludos, Willy
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: Variables Binarias C#
« Respuesta #4 en: 13 de Julio de 2010, 00:22:57 »
Para evitar los IF puedes hacer de este modo:

Código: C#
  1. byte variable_byte;
  2. ...
  3. variable_0bit = (variable_byte & 0x01) != 0;
  4. variable_1bit = (variable_byte & 0x02) != 0;
  5. variable_2bit = (variable_byte & 0x04) != 0;
  6. ...

Si el resultado de la operacion binaria es distinta de cero asigna 1, si es igual asigna 0.
@fabianjsm is on twitter

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Variables Binarias C#
« Respuesta #5 en: 13 de Julio de 2010, 08:55:00 »
Fabian, claro que los if se pueden evitar, por lo general uso esto como flag por eso lo de los if  :mrgreen:

Saludos
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: Variables Binarias C#
« Respuesta #6 en: 13 de Julio de 2010, 14:40:01 »
Estoy de acuerdo contigo willy, solo fue con animos de darle mas opciones al amigo polinomio86  :-/
@fabianjsm is on twitter

Desconectado Palomino86

  • PIC16
  • ***
  • Mensajes: 180
Re: Variables Binarias C#
« Respuesta #7 en: 13 de Julio de 2010, 15:16:04 »
Haber dejenme explicar mas a detalle lo que quiero hacer....

Voy a usar un microcontrolador para manipular el encendido y apagado de 8 dispositivos

para hacer tal movimiento uso una variable tipo byte a la cual llamo

ESTADOS             VAR BYTE

en la cual leo el estado de los 8 dispositivos partiendola de la siguiente manera y metiendo los estados en variables tipo bit:

  CONTROLADOR_1=ESTADOS.BIT0
  CONTROLADOR_2=ESTADOS.BIT1
  CONTROLADOR_3=ESTADOS.BIT2
  CONTROLADOR_4=ESTADOS.BIT3
  CONTROLADOR_5=ESTADOS.BIT4
  CONTROLADOR_6=ESTADOS.BIT5
  CONTROLADOR_7=ESTADOS.BIT6
  CONTROLADOR_8=ESTADOS.BIT7

cabe señalar que los estados se los estoy mandando de manera serial y en binario

         serin2 RADIO_RX,I9600,500,SIGUELE_2,[wait("%CT"),BIN8 CONTROL_0000]

y los guardo para despues ser leido. Hasta ahorita la comunicacion la tengo de pic a pic, y pretendo realizar un sistema que me realice lo mismo. Por eso pregunto que si hay forma de mandar datos binarios en C#.

Saludos
Lo que no me destruye, me fortalece

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Variables Binarias C#
« Respuesta #8 en: 13 de Julio de 2010, 20:48:22 »
el tamaño de variable mas pequeña que maneja cualquier compilador es de un byte.

Se me hace la idea de tu necesidad que sea así,

En un micro realizas los calculos segun el proceso y en el otro lo que haces es recibir los datos y manejar 8 dispositivos.

Lo que puedes hacer es como te decia mas arriba, usas un registro o variable de banderas con el estado de cada dispositivos, lo envias por serie, un solo byte, y luego en el otro pic lees independientemente el estado de cada bit del registro o variable.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.