1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
/** * Author: giltesa * WebSite: http://giltesa.com * License: CC BY-NC-SA 3.0 * * Esta estructura, de tipo union y no struct, permite guardar un dato del tipo que queramos, y hacerlo accesible de dos formas distintas. * - La primera de ellas es accediendo al dato directamente como una variable mas. * - La segunda forma es accediendo a su memoria, en el caso del float este tiene un tamaño de 4 bytes, eso hace que podamos acceder a sus 4 bytes por separado. * Esto aparentemente no tiene ninguna utilidad, salvo que queramos transmitirlo entre dos Arduinos inalambricamente ya que para ello han de ser enviados los bytes uno a uno. Despues se recogen uno a uno y se restauran en otra estructura union: */ union miDato{ float fval; byte b[4]; // Array de bytes de tamaño igual al tamaño de la primera variable: int = 2 bytes, float = 4 bytes } origen, destino; // Se crean dos estructuras Union, cada una es independiente de la otra y guardan distintos datos. void setup() { Serial.begin(9600); delay(1000); // A la estructura de origen se le da un valor float, una temperatura por ejemplo. origen.fval = -103.36; // Se imprime para comprobar que se ha guardado bien: Serial.print("Origen= "); Serial.print(origen.fval); // Ahora se copia byte a byte la estructura de origen en la estructura de destino: for(int i=0 ; i < sizeof(origen.fval) ; i++) destino.b[i] = origen.b[i]; // Y se imprime el float de la estructura de destino, es el mismo dato que el de origen! Serial.print("\nDestino= "); Serial.print(destino.fval); } void loop() { } |
Categoría: Programación
Eclipse – Windows Builder, ayudante para crear interfaces gráficas en Java con SWT o Swing
Una vez nos pongamos a programar en Java seguramente echemos en falta algún ayudante o interfaz que nos facilite el trabajo de crear interfaces gráficas en Java, algo así a lo que facilita el IDE de Microsoft con Visual Studio.
Para solucionar este inconveniente solo tenemos que instalar el plugin WindowsBuilder, este es el mismo que se usa en el plugin de Google para programar en Android, que nos permitirá crear una interfaz con Swing arrastrando componentes sobre la ventana.
Leer másCifrar y descifrar datos con el sistema criptográfico RSA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
/* Author: Alberto Gil Tesa WebSite: http://giltesa.com License: CC BY-NC-SA 3.0 http://goo.gl/CTYnN File: Rsa.java Date: 26/02/2013 NOTAS: http://es.wikipedia.org/wiki/RSA */ import java.math.BigInteger; import java.security.SecureRandom; public class Rsa { private BigInteger n; // Clave compartida private BigInteger d; // Clave privada (no se comparte) private BigInteger k; // Clave publica para la otra parte private final int K = 0, D = 0, N = 1; /** * Constructor que genera las claves publica y privada de tamaño bitlen indicado. * * @param bitlen */ public Rsa(int bitlen) { // Calculamos los dos numeros primos p y q: SecureRandom r = new SecureRandom(); BigInteger p = new BigInteger(bitlen / 2, 100, r); BigInteger q = new BigInteger(bitlen / 2, 100, r); //n = p*q, v= (p-1)*(q-1) n = p.multiply(q); BigInteger v = ( p.subtract(BigInteger.ONE) ).multiply(q.subtract(BigInteger.ONE)); // Calculamos k como el numero impar mas pequeño relativamente primo con v k = new BigInteger("3"); while( v.gcd(k).intValue() > 1 ) k = k.add(new BigInteger("2")); // Calculamos d de modo que (d * k) MOD V = 1 d = k.modInverse(v); } /** * Pasa el BigInteger normal a cifrado usando la clave publica. * * @param message * @return */ public BigInteger encrypt(BigInteger message) { return message.modPow(k, n); } /** * Pasa el BigInteger normal a cifrado usando la clave publica recibida. * * @param message * @param key * @return */ public BigInteger encrypt(BigInteger message, BigInteger[] key) { return message.modPow(key[K], key[N]); } /** * Pasa el BigInteger de cifrado a normal usando la clave privada. * * @param message * @return */ public BigInteger decrypt(BigInteger message) { return message.modPow(d, n); } /** * Pasa el BigInteger de cifrado a normal usando la clave privada recibida. * * @param message * @return */ public BigInteger decrypt(BigInteger message, BigInteger[] key) { return message.modPow(key[D], key[N]); } /** * Devuelve la clave publica. * * @return */ public BigInteger[] getPublicKey() { return new BigInteger[] { k, n }; } /** * Devuelve la clave privada. * * @return */ public BigInteger[] getPrivateKey() { return new BigInteger[] { d, n }; } } |
Eclipse – Android SDK
Ya vimos con anterioridad como instalar Eclipse y configurarlo para programar en PHP. Esta vez toca ver los pasos que debemos de seguir para poder programar en Android y crear la primera aplicación de ¡Hola mundo! (más…)
Leer másMi primera APP para Android: Calculadora Básica
La finalidad de esta aplicación no era realizar una calculadora indestructible que realizara todas las operaciones correctamente, si no iniciarse en la programación en Android probando e implementando las diferentes herramientas que se ofrecen para desarrollar aplicaciones. Por ello esta calculadora no es perfecta, ya hay en el market suficientes calculadoras denigrantes como para subir otra mas.
Leer másEjercicios ADA Procesos – Hoja2
Ejercicios de Programación de Servicios y Procesos en ADA, implementando los algoritmos de:
- Algoritmo de Peterson (Tie-breaker algorithm)
- Algoritmo con turno de espera (Ticket algorithm)
- Algoritmo de la panadería (Bakery algorithm)
- Semáforos, semáforos binarios
- El problema de los filósofos
- El problema de los lectores y los escritores