Publi

  • Algoritmos: Formas de transformar un entero a cadena en C y C++

    8733967750_f80410aa6b_bEn ocasiones disponemos de un entero (int) y necesitamos ese mismo valor en forma de cadena de caracteres (char* en C y string en C++). Ponerlo en pantalla es fácil, nos basta con printf() o cout, pero si queremos transmitir el dato, almacenarlo o hacer que forme parte de un dato más grande, tendremos la necesidad de transformar el tipo de dato.

    Para ello existe una función de stdlib.h no estándar itoa(), y como no es estándar no existe en todas las implementaciones de C, por lo que es conveniente desarrollar una versión de esta función para que podamos compilar nuestro programa en todos los compiladores, o si no disponemos de esta función, para poder utilizarla.… Leer artículo completo

  • Obtener la fecha y hora formateada en C

    Es un código muy simple, aunque tal vez si estáis empezando os resulte muy útil para que vuestros programas sean capaces de decir la hora o hacer alguna operación con la fecha

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <time.h>
    #include <stdio.h>

    int main()
    {
      time_t t;
      struct tm *tm;
      char fechayhora[100];

      t=time(NULL);
      tm=localtime(&t);
      strftime(fechayhora, 100, "%d/%m/%Y", tm);
      printf ("Hoy es: %s\n", fechayhora);
    }

    La forma de utilizar strftime() es pasando los siguientes parámetros:

    • Un array de char o char* donde almacenaremos la cadena de caracteres resultante
    • El tamaño máximo de caracteres que podemos ocupar, es decir, el tamaño reservado para la variable anterior
    • El formato en el que queremos presentar los datos, con algunas palabras clave que indicarán dónde va cada uno de los datos, los más importantes son:
      • %s : Número de segundos desde la época: 1 de Enero del 1970 a las 00:00
      • %d : Día del mes (del 01 al 31)
      • %m : Mes (del 01 al 12)
      • %Y : Año (con 4 cifras.
    Leer artículo completo
  • Modificar brillo y contraste de cada componente de una imagen en C

    windmill

    Un poco do it yourself y friki a la vez es este articulo. En él, vamos a cargar una imagen jpg y vamos a cambiar el brillo y el contraste de la foto que hay en el encabezado de la página, todo desde nuestro programa, simplemente utilizando libjpeg ( $sudo apt-get install libjpeg8-dev ) para cargar y guardar de nuevo la foto. El efecto lo aplicaremos con una función que trabaje con los pixels de la imagen.… Leer artículo completo

  • Leer un archivo XML en C con libxml2 (con todos los nombres, atributos y contenidos)

    xmlxmlHoy en día, para muchas cosas se utiliza el metalenguaje XML ofrece una forma inteligible tanto para la máquina como para el humano.

    Bien, el objetivo es que podamos leer y escribir información XML, y ahora toca hacerlo desde C, debemos ser capaces de extraer los nombres de las etiquetas, atributos y contenidos.

    El código que muestro aquí es una vuelta de tuerca de uno de los ejemplos que aparecen en la web.… Leer artículo completo

  • KDE en La Red Social

    Desde el minuto 8:00 en la película que ilustra cómo se creó Facebook desde que Mark Zuckerberg inició su imperio, David Fincher quiso dejar claro que fue con máquinas Linux.
    redsocial_kde11
    Después de muchos pantallazos, en el 11:46 tenemos esto:
    redsocial_kde2
    Y bueno, durante el principio de la película hay muchas muestras de ordenadores y sistemas operativos (salen ordenadores de muchas personas, comprendo que no todos usen el mismo SO); tras media hora de película, en el 33:39 vuelve a salir otra pantalla completa (mientras tanto no creáis que no salen pantallazos con KDE)
    redsocial_kde3
    Y nos remontamos al 1:54:22 donde sigue con la misma versión de KDE de siempre:
    redsocial_kde4Leer artículo completo

  • Un post para entrar en Technorati

    Siento las molestias que os pueda ocasionar el post, lo borraré en cuanto me validen el blog
    7DCHNYAB72FU… Leer artículo completo

  • Representar imágenes a pantalla completa con GTK+ en C (y romperles la pantalla del portátil)

    crackedscreen1440x900

    Aunque muchos de mis proyectos con GTK+ son en C++, cuando es algo pequeño, es más corto hacerlo en C (aunque una vez que te acostumbras a los objetos, es poco intuitivo).

    Lo que vamos a hacer es crear una ventana, introducir una imagen dentro redimensionada para ocupar la pantalla y poner la ventana a pantalla completa (ojo, no en todos los window managers funciona, pero en casi todos). Al final, lo que conseguimos es poner de fondo la imagen que ilustra el post en cualquier pantalla de portátil para conseguir dar un susto al dueño.… Leer artículo completo

  • Reservar dinámicamente memoria para un array bidimensional en C

    led_array
    Uno de los grandes defectos de un array, es que en tiempo de codificación debemos definir el tamaño que tendrá en tiempo de ejecución. A veces, es lo más fácil y está bien, lo utilizamos, puede que malgastemos unos bytes, pero no pasa nada, otras veces es una variable de un tamaño justo y no nos excedemos. Pero muchas veces, el gran problema, es que no tenemos ni idea de cuánto tamaño darle; si le damos poco, porque nos quedamos cortos, si nos pasamos, porque malgastaremos varios Megabytes, y a veces sabemos que incluso aunque algunas veces se desperdicie gran cantidad de memoria habrá casos en los que nos quedamos cortos.… Leer artículo completo

  • Hallar información de un dispositivo de red en C

    Volviendo a un artículo anterior donde hallábamos la dirección IP de un dispositivo, he decidido extender un poco la funcionalidad para poder hallar más información acerca de un dispositivo de red.

    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
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/ioctl.h>
    #include <net/if.h>
    #include <string.h>

    #define get_addr(var) (*(struct in_addr *) &var.ifr_addr.sa_data[2])

    int getdevinfo(char * ifname) {
      int sock;
      struct ifreq ifr;

      sock=socket(AF_INET, SOCK_DGRAM, 0);
      if (sock<0)
        return -1;          /* No puedo crear el socket */

      ifr.
    Leer artículo completo
  • Hallar la IP de un dispositivo en C

    Puede que se nos haya presentado alguna vez la necesidad de saber la dirección de un dispositivo desde nuestro programa, y no es plan de ponernos a ejecutar ifconfig o algún programa parecido para hallar la dirección.

    Podemos hablar con ioctl() una función destinada a definir y obtener información de dispositivos. Hay cientos de llamadas, aquí comentaremos la llamada SIOCGIFADDR cuya función es la que comentábamos, obtener la dirección de un interfaz de red.… Leer artículo completo