![]() |
¿Cómo obtener información de un "bit set"?
Hola a todos,
Tengo una pregunta para vosotros, a ver si podéis ayudarme, puesto que tengo ninguna o muy poca idea sobre cómo hacerlo en este caso. Se trata de que, siguiendo la ayuda de Turbo Power ShellShock, podemos leer lo siguiente Cita:
Dicho argumento es un "Cardinal", me parece recordar ahora mismo, y, en todo caso, no resulta complicado cuando contiene sólo una unidad: "If, for example, the free space on drive C: changes, Drive will be equal to 4.". El problema me surge para el caso de que dicho argumento contenga más de una unidad. Por ejemplo, dice la ayuda: "If the free space on both the C: and D: drives changed, Drive will be equal to 12.". De acuerdo, pero, ¿qué pasa si las unidades son distintas? Y, en cualquier caso, ¿cómo demonios hago para obtener del "Cardinal" las unidades? A ver si, por favor, puede alguien echarme una mano. Si necesitáis más información, cualquiera que sea, no dudéis en decírmelo y yo trataré de proporcionárosla lo antes posible. ¡Muchísimas gracias de antemano a todos! :) P.D. Dedico este tema a Casimiro. ;) |
Cada bit corresponde a una potencia de dos: bit 0 a 2^0 = 1, bit 1 a 2^1 = 2, bit 2 a 2^2 = 4, bit 3 a 2^3 = 8, etc. Si quieres saber que pasa en específico con un bit (un drive) tienes que aislarlo operando el cardinal con AND y la potencia de 2 que corresponda:
Si C and 4 <> 0 quiere decir que el bit 2 está "prendido". Me parece que en Delphi hay una clase TBits que facilita el uso de bits. // Saludos |
Hola Dec.
Y si quisieras saber el valor de un bit en particular, o reccorrer el número para ver los valores de los diferentes bits:
Un saludo. |
Hola,
Gracias por vuestras respuestas, aunque, no sé si podré yo sacar algo en limpio. En cuanto pueda haré pruebas y pondré aquí qué he hecho y preguntaré porqué no funciona. :D :D ¡Gracias a ambos! ;) |
Hola,
Como funcionar... parece que funciona. Sin embargo, me queda la espinita de no saberme quitar de encima el "mapa de unidades" que conformo "directamente" y que creo que puede hacerse de otra forma más elegante. Por lo demás, lo mío, lamentablemente, no son las matemáticas, así que sigo son comprender muy bien qué ocurre a nivel de "bits", quizá algún día... sea como sea, el código podría quedar más o menos así, a modo de ejemplo:
Por supuesto, cualquier sugerencia será bienvenida. ;) |
En realidad, el arreglo DRIVES te lo puedes ahorrar. A partir de I en la iteración puedes obtener la letra así:
// Saludos |
Hola,
No entiendo, Román. ¿De dónde saco yo esa "A"? |
Se trata del viejo truco de sumarle 65 al 0 que es la unidad A (ASCII), 1 + 65 = 66 =B etc.
Recuerdo que yo lo usaba en ensamblador. Un Saludo. |
Hola,
Ese truco no me le sabía yo, Marcos, se agradece. ;) Aunque me parece a mí que Román no va por ahí... :rolleyes: Entonces el código ya podría quedar, como poco, de esta manera:
Siendo "TRICK_ASCII_NUMBER" igual a 65. Prescindiendo ya del arreglo "DRIVES". ;) |
Hola Dec.
Creo que se puede reducir un poco mas:
Saludos. |
Hola,
Muy chula esa ecfisa. Bueno, y la otra. Muchas gracias. ;) |
Cita:
// Saludos |
Hola,
Hombre, Román, pero, como no me digas de dónde saco yo esa "A"... es que no me aclaro. ;) Acaso esa constante no está del todo bien y llevas razón. Al fin y al cabo se trata de prescindir del arreglo, pero, ¿por qué, exactamente?... A mí es que se me ha metido en la cabeza porque intuyo (¡Cuidado!) otra forma de hacerlo (tal vez la que tú no dices... :D), pero, lo cierto es que el arreglo tampoco pide pan, como se suele decir. ¿No? Por lo demás, el viejo truco del joven Marcos sigue siendo un buen truco. :) |
Cita:
// Saludos |
Cita:
|
|
¡Buenas!
Hombre, ecfisa, ¡así es como se explican las cosas! :) Nota mental: ir el alergólogo, que, algo sabrá de lo que me pase. :D |
Hola,
Bueno. De nuevo muchas gracias a todos, puesto que el problema está resuelto, es decir, "funcionando". ;) |
Cita:
|
| La franja horaria es GMT +2. Ahora son las 20:06:53. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi