miércoles, 13 de octubre de 2010

FontsViewer

0

FontsViewer es un pequeño programa para visualizar y comparar las diferentes tipografías que se encuentran instaladas en tu ordenador.

Entres su capacidades se encuentra la posibilidad de cambiar el color de fondo y del texto de la fuente que estamos viendo, también se puede editar el texto y cambiar su tamaño, por ultimo la lista de fuentes la puedes ver de dos maneras diferentes, una lista estándar con todos lo nombres de fuentes y otra con el tipo de fuente ya aplicada a su nombre.

Screenshot



Descargar

DescargarSource Code

Licencia

FontsViewer se se encuentra vajo la licencia nueva BSD, por lo que si quieres o necesitas modificar algo de este programa para que quede a tu gusto, o hacer uno aun mejor, que nada te lo impida.

Comparte o puntua esta publicación ▼

domingo, 10 de octubre de 2010

HexDump

0

HexDump es un visor hexadecimal simple que se utiliza principalmente a través de la linea de comandos. Para usarlo simplemente ejecútalo con el nombre de un archivo como primer argumento:

HexDump.exe file.ext

Es muy útil en este caso redireccionar la salida a un archivo de texto para que quede guardado y pueda verse con mas calma:

HexDump.exe file.ext > file_hex.txt

Screenshot

DescargarSource Code

Código fuente

#include <stdio.h>

int main(int argc, char* argv[])
{
    if (argc != 2)
    {
        printf("Usage:  HexDump file  \n");
        return 1;
    }

    FILE *file = fopen(argv[1],"rb");
    if (!file)
    {
        printf("El fichero no existe o no puede ser abierto.\n");
        return 2;
    }

    char d[] = "                \0";
    int bytes,index = 0;

    while (bytes=fread(d, 1, 16, file))
    {
        printf("%08X%c",index+=16,179);

        for (int i=0; i<bytes; i++)
        {
            printf(" %02X",(unsigned char)(d[i]));
            if ((i+1)%4 == 0) printf(" ");
            if (d[i] == 127 || d[i]< -127 || (d[i]>=0 && d[i]<=31)) d[i] = '.';
        }

        if (bytes < 16)
        {
            for (int i=bytes; i<16; i++)
            {
                printf("   ");
                if ((i+1)%4 == 0) printf(" ");
            }
            d[bytes] = '\0';
        }

        printf("%c%s\n",179,d);
    }
    fclose(file);
    return 0;
}

Comparte o puntua esta publicación ▼

sábado, 9 de octubre de 2010

PasswdGen

0

PasswdGen es un programa o utilidad CLI que genera contraseñas completamente aleatorias del tamaño deseado y con los caracteres que prefieras.

Modo de uso: PasswdGen -s size -c chars [-h]
Con -s se indica el tamaño de la contraseña y con -c la lista con todos los caracteres posibles. Con -h mostramos la ayuda.

Ejemplo: PasswdGen -s 10 -c 0123456789ABCDEF Generaría por ejemplo 93E41C6E20

Código fuente:

// PasswdGen.cpp
#include <iostream>
using namespace std;

void Usage()
{
    cout << endl << "PasswdGen 0.1  -  davidxl.blogspot.com" << endl << endl;
    cout << "Usage: PasswdGen -s <size> -c <chars> -h" << endl;
    cout << "  -h : Show Help (This)" << endl;
    cout << "  -s : Number of characters in password (default 8)" << endl;
    cout << "  -c : characters of password (default a..zA..Z..0..9)" << endl << endl;
    cout << "Example: PasswdGen -s 4 -c 0123456789"<< endl;
}

int main(int argc, char* argv[])
{
    if (argc < 2)
    {
        Usage();
        return 0;
    }

    unsigned int size = 8,i,clen;
    char * c = 0;

    for (i=1; i<argc ; i++)
    {
        if (strlen(argv[i]) > 1 && argv[i][0] == '-')
        {
            switch (argv[i][1])
            {
            case 's':
                size = atoi(argv[i+1]);
                break;
            case 'c':
                c = argv[i+1];
                break;
            case 'h':
                Usage();
                return 0;
            default:
                cout << "Comand '-" << argv[i][1] << "' invalid.";
                //return 1;
            }
        }
    }

    if (c == 0) c = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz";
    clen = strlen(c);

    char * passwd = new char [size+1];
    for (i=0; i<size; i++)
        passwd[i] = c[rand()%clen];
    passwd[i] = '\0';

    cout << passwd;
}

Comparte o puntua esta publicación ▼

Generar números aleatorios en C

0

En algunas ocasiones necesitamos una función que nos genere números aleatorios, C dispone de rand(), que al ser llamada retorna un numero comprendido entre 0 y 32767.

Esta función no resuelve nuestro problema si lo que queremos es un numero aleatorio cullo valor se encuentre entre, por ejemplo, 20 y 70, por lo que a continuación muestro el código de la función rand() sobrecargada para que se pueda establecer el mínimo y máximo, frand() que genera numeros en coma flotante entre 0 y 1 y un ejemplo para poner a prueba estas funciones.

#include<iostream>
using namespace std;

// retorna un numero del intervalo [min,max]
int rand(int min, int max)
{
    return rand() % (max-min+1) + min;
}

// retorna un numero del intervalo [0,1]
float frand()
{
    return float(rand())/32767.0;
}

// retorna un numero del intervalo [min,max]
int myrand(int min, int max)
{
    return rand()*(max-min+1)/RAND_MAX + min;
}

int main ()
{
    cout << "--------  Random Funtion Test  --------" << endl;
    cout << "Minimo y Maximo: ";
    int min, max, iter;
    cin >> min >> max;
    cout << endl << "Numero de iteraciones: ";
    cin >> iter;
    cout << endl;

    unsigned int range = max - min + 1;
    unsigned int * f = new unsigned int [range];
    memset (f,0,range*4);

    int rmax = min, rmin = max;
    for (int i=0; i<iter; i++)
    {
        int x = myrand(min,max);
        f[x-min]++;
        if (x<rmin) rmin = x;
        else if (x>rmax) rmax = x;
    }

    cout << " -> Min: " << rmin << " ,  Max: " << rmax << endl;
    cout << "TABLA DE FRECUENCIAS" << endl;
    for (int i=0; i<range; i++)
        cout << i+min << '\t' << f[i] << endl;
    cout << endl;

    return 0;
}

Comparte o puntua esta publicación ▼

domingo, 3 de octubre de 2010

ColorPicker sin imágenes, solo js+css3

0

A modo de experimento y base para un próximo proyecto hice un ColorPiker que no usa ninguna imagen, ya que las he sustituido por css gradients, por lo que solo es compatible de momento con Chrome y Firefox.


DescargarSource Code

Comparte o puntua esta publicación ▼

jueves, 30 de septiembre de 2010

Calcular factores primos de un numero

0

Este programa es variación de Saber si un numero es primo y Calculando números primos y como dice en el titulo se encarga de calcular los factores primos de un numero. Por razones desconocidas falla algunas veces, no con determinados números sino de forma aleatoria, todavia no se que es lo que lo causa.

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
start:
    cout << endl << endl;
    unsigned int x,a, i = 3, j, n = 2, d,max;
    unsigned int * p = new unsigned int[x/3];
    p[0] = 2;
    p[1] = 3;

    cin >> x;
    cin.clear();
    if (x < 2)
    {
        cout << x << " no es mayor que 1." << endl;
        goto start;
    }

top:
    while (x>1)
    {
        for (a=0; a<n; a++)
        {
            if (x%p[a]==0)
            {
                x/=p[a];
                cout << p[a] << ", ";
                goto top;
            }
        }

        max = int(sqrt(x));
        while (i < max)
        {
            d = int(sqrt(i+=2));
            j = 1;
            while (d >= p[j] && i%p[j]) j++;
            if (d < p[j])
            {
                p[n++] = i;
                if (x%i == 0)
                {
                    cout << i << ", ";
                    x/=i;
                    goto top;
                }
            }
        }
        cout << x << ".";
        break;
    }
    delete [] p;
    goto start;
};

Comparte o puntua esta publicación ▼

jueves, 23 de septiembre de 2010

Saber si un numero es primo : C

0

Hace unos meses publiqué el código de un programa que calculaba muy rápido todos los números primos desde cero a un numero dado.[IR]

Hoy pongo otro parecido, basado en el anterior pero que calcula y dice si un numero es primo o no.

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
top:

    unsigned int x, i = 3, j, n = 2, d,max;
    cin >> x;
    cin.clear();

    if (x < 2)
        cout << x << " no es mayor que 1." << endl;
    else if (x < 4)
        cout << x << " es primo." << endl;
    else if (x%2 == 0)
        cout << x << " no es primo." << "  Es divisible por 2" << endl;
    else if (x%3 == 0)
        cout << x << " no es primo." << "  Es divisible por 3" << endl;
    else
    {
        int * p = new int[x/3];
        max = int(sqrt(x));
        p[0] = 2;
        p[1] = 3;

        while (i < max)
        {
            d = int(sqrt(i+=2));
            j = 1;
            while (d >= p[j] && i%p[j]) j++;
            if (d < p[j])
            {
                p[n++] = i;
                if (x%i == 0)
                {
                    cout << x << " no es primo." <<endl<< "  Es divisible por " << i << endl;
                    goto top;
                }
            }
        };
        cout << x << " es primo" << endl;
    }
    cout << endl;
    goto top;
};

Comparte o puntua esta publicación ▼

sábado, 18 de septiembre de 2010

Generar imagen de un archivo de música

0

Hoy voy a mostrar el código fuente de un programa que hice y que, como se ve en la imagen de abajo, genera una imagen a partir de un archivo de música.

El programa no es de mas de 80 lineas, y usa la librería "Bass" para leer los archivos de música y "easyBMP" para generar la imagen.

Seguramente muchos estaréis pensando que bmp es peor que, por ejemplo,  png o jpg, pero aunque ocupe mas es el mas fácil y simple. Por otro lado, el programa esta sin optimizar, y seguramente tenga algunos pequeños fallos.

Descargar

#include "bass.h"
#include "EasyBMP.h"
using namespace std;

#define WIDTH 1520
#define HEIGHT 150

int main(int argc, char* file[])
{
    if (argc < 2)
        cout << "Usage Music2bmp file1.mp3 ... fileX.ext" << endl;
    else if (HIWORD(BASS_GetVersion())!=BASSVERSION)
        cout << "An incorrect version of BASS.DLL was loaded" << endl;
    else if (!BASS_Init(-1,44100,0,0,NULL))
        cout << "Can't initialize device" << endl;
    else
    {
        for (int z=1; z<argc; z++)
        {
            cout << "      "<< file[z];

            DWORD chan;
            if (!(chan = BASS_StreamCreateFile(FALSE,file[z],0,0,BASS_STREAM_DECODE)) &&
                    !(chan = BASS_MusicLoad(FALSE,file[z],0,0,BASS_MUSIC_DECODE,0)))
            {
                cout << '\r' << "ERROR " << endl; //load error
                continue;
            }

            BMP img;
            img.SetSize(WIDTH,HEIGHT);
            img.SetBitDepth(24);

            DWORD bpp = BASS_ChannelGetLength(chan,BASS_POS_BYTE)/WIDTH;
            DWORD cpos=0, peak[2]= {0}, n=0, pos=0, level;

            do
            {
                level = BASS_ChannelGetLevel(chan);
                n++;
                peak[0] = (peak[0]*(n-1)+LOWORD(level))/n;
                peak[1] = (peak[1]*(n-1)+HIWORD(level))/n;
                pos = BASS_ChannelGetPosition(chan,BASS_POS_BYTE)/bpp;
                if (pos>cpos)
                {
                    for (DWORD a=0,b=peak[0]*(HEIGHT/2)/32768; a<b; a++)
                    {
                        img(cpos, HEIGHT/2-a-1)->Red = (BYTE) (a+b);
                        img(cpos, HEIGHT/2-a-1)->Green = (BYTE) (a*1.75+b*1.25);
                        img(cpos, HEIGHT/2-a-1)->Blue = (BYTE) (a*2.5+b);
                    }
                    for (DWORD a=0,c=peak[1]*(HEIGHT/2)/32768; a<c; a++)
                    {
                        img(cpos, HEIGHT/2+a)->Red = (BYTE) (a+c*1.25);
                        img(cpos, HEIGHT/2+a)->Green = (BYTE) (a*1.75+c);
                        img(cpos, HEIGHT/2+a)->Blue = (BYTE) (a*2.5+c);
                    }
                    cout << '\r' << (pos*100)/WIDTH << '%';
                    cpos = pos;
                    peak[0]=peak[1]=n=0;

                }
            }
            while (pos<WIDTH);
            BASS_StreamFree(chan);
            Rescale(img,'W',WIDTH/2);

            char * out = new char[strlen(file[z])+4];
            strcpy(out,file[z]);
            strcat (out,".bmp");
            img.WriteToFile(out);
            delete [] out;
            cout << '\r' << "OK    " << endl;
        }
        BASS_Free();
    }
    system("pause");
    return 0;
}

Comparte o puntua esta publicación ▼

viernes, 3 de septiembre de 2010

1Kb JavaScript Calendar

0

Otro proyecto más terminado, se trata de un calendario JavaScript, en concreto es una única función que genera un calendario, con la posivilidad de cambiar el primer dia de la semana, ya que en algunos paises acostumbran a empezar por el domingo, también dispone de dos botones para cambiar de mes, se puede cambiar el idioma, y todo esto en tan solo un kilobyte.

Ver / Descargar Ver código fuente

Comparte o puntua esta publicación ▼

viernes, 23 de julio de 2010

ColorCtrl

0

ColorCtrl es una pequeña utilidad hecha con el Visual C# 2010 que te servirá para configurar el brillo, contraste y gamma de tu pantalla, con la posibilidad de ajustar estos parámetros en cada color independientemente.

DESCARGAR SOURCE CODE

NOTA: Para que funcione requiere tener instalado ".net framework 3.5"

Comparte o puntua esta publicación ▼

Captcha graciosa

0

Intentando descargar un archivo de SharingMatrix....


Comparte o puntua esta publicación ▼

martes, 13 de julio de 2010

Explorador de archivos con c++

2

En esta entrada voy a mostrar la manera de ver el contenido de una carpeta o buscar algún archivo usando c++.

#include<windows.h>
#include<iostream>

using namespace std;

int main()
{
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind;
    hFind = FindFirstFile("C:\\*", &FindFileData);

    if (hFind == INVALID_HANDLE_VALUE)
    {
        cout << "FindFirstFile failed: " << GetLastError() << endl;
        return 1;
    }

    do cout << FindFileData.cFileName << endl;
    while (FindNextFile(hFind, &FindFileData));

    FindClose(hFind);
    return 0;
}

Como se puede ver, hace uso de las funciones FindNextFile() y FindFirstFile() y de la estructura WIN32_FIND_DATA(). El primer parámetro de FindFirstFile() puede ser el nombre de un archivo o directorio y pueden usarse los caracteres '*' y '?'

Comparte o puntua esta publicación ▼

miércoles, 7 de julio de 2010

Controla el nivel de backlight de una lcd

2

Hoy en día la mayoría de los portatiles, por no decir todos permiten cambiar el nivel backlight o de luz que emite la pantalla.

Aunque me a costado he conseguido encontrar la información suficiente para poder hacer un primer ejemplo funcional, por lo menos en mi Asus EeePC, aunque estoy seguro que funciona en la mayoría.

Las primeras 25 líneas no harían falta si tienes el kit de desarrollo de drivers de Windows.

#include <windows.h>
#include <iostream>

using namespace std;

typedef struct _DISPLAY_BRIGHTNESS
{
    UCHAR ucDisplayPolicy;
    UCHAR ucACBrightness;
    UCHAR ucDCBrightness;
} DISPLAY_BRIGHTNESS, *PDISPLAY_BRIGHTNESS;

#define FILE_DEVICE_VIDEO   0x00000023
#define METHOD_BUFFERED     0
#define FILE_ANY_ACCESS     0

#define CTL_CODE(a,b,c,d) ((a)<<16 | (b)<<2 | (c)<<14 | (d))

#define IOCTL_VIDEO_QUERY_SUPPORTED_BRIGHTNESS \
    CTL_CODE(FILE_DEVICE_VIDEO, 0x125, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESS \
    CTL_CODE(FILE_DEVICE_VIDEO, 0x126, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS \
    CTL_CODE(FILE_DEVICE_VIDEO, 0x127, METHOD_BUFFERED, FILE_ANY_ACCESS)

int main(void)
{
    HANDLE hLCD = CreateFile("\\\\.\\LCD",       // open LCD device
                             GENERIC_READ,                  // access to the drive
                             FILE_SHARE_READ|FILE_SHARE_WRITE,// share mode
                             NULL,                          // default security attributes
                             OPEN_EXISTING,                 // disposition
                             0,                             // file attributes
                             NULL);

    if (hLCD == INVALID_HANDLE_VALUE)
    {
        cout << "error:" << GetLastError() << endl;
        return 1;
    }

    BYTE SupportedBrightness[256];
    DWORD nBytesReturned;

    int nRes = DeviceIoControl(
                   (HANDLE) hLCD,                           // handle to device
                   IOCTL_VIDEO_QUERY_SUPPORTED_BRIGHTNESS,  // dwIoControlCode
                   NULL,                                    // lpInBuffer
                   0,                                       // nInBufferSize
                   (LPVOID) SupportedBrightness,            // output buffer
                   sizeof(SupportedBrightness),             // size of output buffer
                   (LPDWORD) &nBytesReturned,               // bytes returned
                   NULL                                     // OVERLAPPED
               );

    if (nRes == 0)
    {
        cout << "error:" << GetLastError() << endl;
        return 2;
    }

    cout << "Niveles soportados: ";
    for (DWORD i=0; i<nBytesReturned; i++)
    {
        cout << (DWORD)SupportedBrightness[i] << ", ";
    }
    cout << endl << endl;

    DISPLAY_BRIGHTNESS DisplayBrightness;
    nRes = DeviceIoControl(
               (HANDLE) hLCD,                           // handle to device
               IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESS,    // dwIoControlCode
               NULL,                                    // lpInBuffer
               0,                                       // nInBufferSize
               (LPVOID) &DisplayBrightness,             // output buffer
               sizeof(DisplayBrightness),               // size of output buffer
               (LPDWORD) &nBytesReturned,               // bytes returned
               NULL                                     // OVERLAPPED
           );

    if (nRes == 0)
    {
        cout << "error:" << GetLastError() << endl;
        return 3;
    }

    cout << "DisplayPolicy: " << (int)DisplayBrightness.ucDisplayPolicy << endl
         << "ACBrightness: " << (int)DisplayBrightness.ucACBrightness  << endl
         << "DCBrightness: " << (int)DisplayBrightness.ucDCBrightness << endl
         << endl;

    system("PAUSE");

    DISPLAY_BRIGHTNESS ON = {2,36,36};  // eeePC max
    DISPLAY_BRIGHTNESS OFF = {2,1,1};
    while (!GetAsyncKeyState(VK_ESCAPE))
    {
        Sleep(500);
        DeviceIoControl((HANDLE) hLCD,IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS,(LPVOID)&ON,sizeof(DISPLAY_BRIGHTNESS),NULL,0,(LPDWORD) &nBytesReturned,NULL);
        Sleep(500);
        DeviceIoControl((HANDLE) hLCD,IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS,(LPVOID)&OFF,sizeof(DISPLAY_BRIGHTNESS),NULL,0,(LPDWORD) &nBytesReturned,NULL);
    }

    nRes = DeviceIoControl(
               (HANDLE) hLCD,                           // handle to device
               IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS,      // dwIoControlCode
               (LPVOID) &DisplayBrightness,             // lpInBuffer
               sizeof(DisplayBrightness),               // nInBufferSize
               NULL,                                    // output buffer
               0,                                       // size of output buffer
               (LPDWORD) &nBytesReturned,               // bytes returned
               NULL                                     // OVERLAPPED
           );

    if (nRes == 0)
    {
        cout << "error:" << GetLastError() << endl;
        return 4;
    }

    CloseHandle(hLCD);
    return 0;
}

Comparte o puntua esta publicación ▼

lunes, 5 de julio de 2010

calcular CRC32 facil

5

Calcular el CRC32 de un archivo o determinados datos es útil para saber si los datos se han transferido correctamente. El valor del crc del archivo de origen tiene que ser exactamente igual que el de destino, en caso contrario el archivo de destino es diferente (erróneo).

PHP tiene una función que lo calcula:

function checksum($filename)
{ 
    return (strtoupper(dechex(crc32(file_get_contents($filename))))); 
}

En C o C++ la función la tienes que hacer tu o usar esta, tienes la posibilidad de usar una tabla ya procesada o de generarla con la función initialise_crc32_table().

#include <iostream>
using namespace std;

unsigned crc32_table[] =
{
    0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
    0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
    0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
    0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
    0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
    0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
    0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
    0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
    0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
    0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
    0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
    0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
    0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
    0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
    0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
    0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
    0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
    0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
    0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
    0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
    0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
    0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
    0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
    0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
    0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
    0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
    0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
    0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
    0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
    0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
    0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
    0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
};

unsigned int crc32_table[256];

void initialise_crc32_table()
{
    char const polynomial_terms[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
    unsigned int polynomial_pattern = 0;
    for (unsigned int i = 0; i < sizeof(polynomial_terms); ++i)
        polynomial_pattern |= 1 << (31 - polynomial_terms[i]);
    const unsigned int size = sizeof(crc32_table)/sizeof(int);
    for (unsigned int i = 0; i < size; ++i)
    {
        unsigned int new_table_entry = i;
        for (unsigned int j = 0; j < 8; ++j)
        {
            bool first_bit_was_set = (new_table_entry & 1);
            new_table_entry >>= 1;
            if (first_bit_was_set == true)
                new_table_entry ^= polynomial_pattern;
            crc32_table[i] = new_table_entry;
        }
    }
}

unsigned crc32(const char * data, size_t size, unsigned sum = 0)
{
    sum ^= 0xffffffff;
    while (size--) sum = crc32_table[(*data++ ^ sum) & 0xff] ^ (sum >> 8);
    return sum ^ 0xffffffff;
}


int main()
{
    initialise_crc32_table();
    cout << hex << crc32("DavidXL",7) << endl;
    return 0;
}

Espero que te sirva el ejemplo.

Comparte o puntua esta publicación ▼

domingo, 6 de junio de 2010

Cambiar el color del texto de la consola

0

No es muy común en Windows pero quizás alguna vez quieras cambiar el color del texto/fondo de la consola, por ejemplo, que los mensajes de error salgan de color rojo.

Creo que con el ejemplo es mas que suficiente para saber y entender como hacerlo.

De todas formas, por si alguien anda un poco despistado pongo todos los posibles valores del segundo parámetro de la función que se encarga de cambiar el color. Y acuérdate que para poner varios hay que usar el operador binario OR | .

FOREGROUND_INTENSITY
FOREGROUND_RED
FOREGROUND_GREEN
FOREGROUND_BLUE 
BACKGROUND_INTENSITY
BACKGROUND_RED
BACKGROUND_GREEN
BACKGROUND_BLUE

#include <windows.h>

HANDLE hstdout;

void write(const char* message)
{
    DWORD t;
    WriteConsole(hstdout, (const void*)message, lstrlen(message), &t,NULL);
}

int main()
{
    hstdout = GetStdHandle(STD_OUTPUT_HANDLE);

    write("\n\n");
    SetConsoleTextAttribute(hstdout, FOREGROUND_INTENSITY | FOREGROUND_RED | BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE );
    for (int i = 0; i< 40; i++) write(" ");
    write("\n          davidxl.blogspot.com          \n");
    for (int i = 0; i< 40; i++) write(" ");
    SetConsoleTextAttribute(hstdout,FOREGROUND_INTENSITY);
    write("\n\n");


    for (int i = 0; i<256; i++)
    {
        SetConsoleTextAttribute(hstdout,i);
        write("?");
    }

    SetConsoleTextAttribute(hstdout,FOREGROUND_INTENSITY);
    return 0;
}
Comparte o puntua esta publicación ▼

Elimina de un archivo todas las apariciones de un fragmento de texto

0

Lo mejor de saber programar es que cuando necesitas un programa muy concreto te lo puedes hacer tu, y este seguramente lo hayamos necesitado alguna vez.

Al programa le pasas 2 parámetros, el primero el nombre del archivo de texto (txt, html... cualquiera que se pueda abrir con el notepad), y el segundo es el texto o palabra que quieres quitar (si lleva espacios ponlo entre comillas).

#include <iostream>
#include <fstream>
using namespace std;

int main(int argc, char* argv[])
{
    if (argc < 3)
    {
        cout << "QuitaPalabras.exe filename text" << endl;
        return 1;
    }
    int wsize = strlen(argv[2]);

    ifstream in(argv[1],ios::binary);

    in.seekg(0,ios::end);
    long size = in.tellg();
    in.seekg(0,ios::beg);
    size -= long(in.tellg());

    char * buffer = new char [size];

    in.read(buffer,size);
    in.close();

    int i=0,j=0;
    while (i<size)
    {
        int k = 0;
        while (k<wsize && buffer[i+k] == argv[2][k]) k++;
        if (k<wsize)
            buffer[j++] = buffer[i++];
        else
            i+=wsize;
    }

    ofstream out(argv[1],ios::binary);
    out.write(buffer,j);
    out.close();

    return 0;
}

Comparte o puntua esta publicación ▼

Beep()

0

Un ejemplo de como hacer que suene el altavoz interno del PC con la funcion Beep(frecuecia,duracion).

#include <windows.h>

int main()
{
    for (int i = 37; i< 32000; i+=100)
    {
        Beep( i, 100 );
        Sleep(101);
    }

    system("PAUSE");
    return 0;
}
Comparte o puntua esta publicación ▼