none
Como sacar la posición de una cadena de números binary RRS feed

  • Pregunta

  • Hola,

    Tengo esta mi variable de Session que me devuelve una mi cadena de numero binary ejemplo:

    1111111

    Todos esos unos Significa que tiene todos los permisos a Home, clientes, reportes consultas, imprimir, eliminar, agregar, si trae todos 1 significa que tiene acceso a todo en ese orden y si viene algun 0 no tiene acceso correspondiente al orden donde este.

    Saludos.

    miércoles, 12 de agosto de 2020 17:45

Todas las respuestas

  • Hola Jarlis Pereira,

    Creo que a lo que te refieres no es un binario, ya que cada espacio representa un booleano directamente. Pienso que podría tomar ese valor que te devuelve y guardarlo en un String. Posteriormente tomas ese String y guardas cada uno de sus caracteres en un arreglo. Me parece que no vas a tener muchos problemas porque la cantidad de páginas o de elementos para los que ocupas validar estos permisos lógicos de acceso no va a cambiar, entonces no tienes que lidiar con variabilidad en la cantidad de elementos que tienes que evaluar. Cuando ya tengas el arreglo de caracteres, puedes escribir una serie de if else o un proceso similar para evaluar cada carácter en el arreglo y determinar a que si tiene acceso y a que no. Por ejemplo:

    //lo conviertes a string
    string permisos = 111111.ToString();
    //guardas cada caracter en un arreglo
    char[] arreglo = permisos.ToCharArray();
    //evaluas cada escenario
    if(arreglo[0].Equals('1') && arreglo[1].Equals('1') && arreglo[2].Equals('1') && arreglo[3].Equals('1') && arreglo[4].Equals('1') && arreglo[5].Equals('1')){
    //Tiene acceso a todo
    }
    //else if(){}

    Quedo pendiente de cualquier actualización. Gracias por levantar tu consulta en los foros de msdn.

     

    Saludos cordiales

    Gabriel Castro

     ____________________________ 

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    miércoles, 12 de agosto de 2020 19:18
  • hola

    Tenes multiples opciones no se realzia de esa forma, se usan los operadores de bitwise

    Eso no es ningun binario solo son true/false puestos en una posicion

    Si querias hacerlo en binario se usan los operadores AND y OR a nivel de bit

    Bitwise and shift operators (C# reference)

    -----

    Puedes usar bitwise para guardar multi seleccion en un solo campo.

    No se si conoces como funciona este concepto, pero basicamente se basa en guardar los valores 1,2,4,8,16 etc

    Enum, Flags and bitwise operators

    Create Enumeration as Bit Flags

    entonces podrias tener un enum para la semana como ser

    enum SemanaEnum{
       Lunes = 1,
       Marte = 2,
       Miercoles = 4,
       Jueves = 8,
       Viernes = 16,
       Sabado = 32,
       Domingo = 128,
    }

    entonces usando el OR logico puede unir varios de estos valores en un solo campo, no necesitas una propiedad dia de la semana

    SemanaEnum result = SemanaEnum.Martes | SemanaEnum.Jueves;

    La idea es que despues cuando evalues puedas determinar si esta esa seleccion o no

    if ((paq.Semana & SemanaEnum.Marte) == SemanaEnum.Marte){
       //codigo
    }

    Tenia un ejemplo con dias de la semana, pero en tu caso para Home = 1, clientes= 2, reportes = 4, imprimir = 8, y asi continua

    si vas a poner todas las opciones en la Session podrias el numero en donde apliques esas operaciones

    Session["Permisos"] = PermisoEnu.Home | PermisoEnu.Clientes | ....

    los ... son el resto

    Despues aplicas el & para evaluar cuales tiene asignado segun el nro que se recupere

    Asi es como se persiste multiple seleccion usando binarios

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 12 de agosto de 2020 19:23
  • Gracias por la ayuda,

    Como seria entonces ya que tengo la variable: binary que trae 1111111.

    como lo adapto a esta forma.

    enum SemanaEnum{
       Lunes = 1,
       Marte = 2,
       Miercoles = 4,
       Jueves = 8,
       Viernes = 16,
       Sabado = 32,
       Domingo = 128,
    }

    Gracias

    miércoles, 12 de agosto de 2020 20:24
  • Hola gracias por responder, lo que quiero es esto.

    Tengo mi menu.

    Home, administrador, consultas, reportes, imprimir, eliminar, gráficas,

    entonces toda esta 1111111 significa que tiene acceso a todas las pantallas, pero si viene de esta manera 1101111

    significa que a consultas no tiene permisos y no se mostrara la pantalla consultas ya que en ese orden estan.

    Gracias

    miércoles, 12 de agosto de 2020 20:59
  • Hola Jarlis Pereira,

    ¿Viste mi comentario anterior? Me parece que lo podrías realizar de esa manera, por favor coméntame qué opinas. Quedo pendiente de cualquier actualización. Gracias por levantar tu consulta en los foros de msdn.

     

    Saludos cordiales

    Gabriel Castro

     ____________________________ 

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    miércoles, 12 de agosto de 2020 23:49
  • Hola Jarlis Pereira,

    ¿Alguna novedad sobre la consulta realizada? ¿Han sido útiles las respuestas proporcionadas?

     

    Saludos cordiales

    Gabriel Castro

     ____________________________ 

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    viernes, 21 de agosto de 2020 1:03