elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Mandar rawData a una impresora luego de levantarla de un archivo y modificarla
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mandar rawData a una impresora luego de levantarla de un archivo y modificarla  (Leído 1,473 veces)
Alitohq

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Mandar rawData a una impresora luego de levantarla de un archivo y modificarla
« en: 22 Diciembre 2012, 23:21 pm »

Tengo una impresora que puede imprimir código de barras.

Tengo, por otro lado, que leer un archivo (binario) que es el que tiene el texto más otros bytes (especiales, de impresión, como por ejemplo el caracter que determina que 'empieza un codigo de barras').

Quiero leer el archivo, levantarlo a un stream, parsear esos bytes y buscar, por ejemplo, ese byte que determina cuando empieza un codigo de barra (en mi protocolo es 0x14) y reemplazarlo por otros 3 bytes que son los que realmente usa la impresora que tengo en este momento.

Mi problema (pongo el codigo al final) es que si el archivo lo levanto del disco, no lo toco, Y LO MANDO INMEDIATAMENTE A IMPRESORA, el código de barras se imprime perfecto (lo mismo si uso, por ejemplo, en el command promt: print c:\test lpt).
Ahora, si lo que quiero es empezar a editar el contenido del archivo para poner los bytes que corresponden, cuando los mando a la impresora, me termina imprimiendo texto en vez del código de barras..

Código:
    static void ImprimirArchivo(unsigned char* path)
    {
        std::ifstream input((char*)path, std::ios::binary);
        std::ofstream output("lpt1", std::ios::binary);

        std::istreambuf_iterator<char> eos;
        std::istreambuf_iterator<char> streamInputIterator (input.rdbuf());

        bool codeBarStarted = false;
        int iterationsCounter = 0;
        while(streamInputIterator!=eos)
        {
            if(*streamInputIterator == 0x14)
            {
                output << '1d';
                output << '6b';
                output << '05';
                codeBarStarted = true;
            }
            else
            {
                output << *streamInputIterator;
            }

            if(codeBarStarted)
            {
                iterationsCounter++;
                if(iterationsCounter == 10)
                {
                    output << 0x00;
                    codeBarStarted = false;
                    iterationsCounter = 0;
                }
            }

            streamInputIterator++;
        }

por otro lado, en la parte de

Código:
            if(*streamInputIterator == 0x14)
            {
                output << '1d';
                output << '6b';
                output << '05';
                codeBarStarted = true;
            }
si lo cambio por

Código:
            if(*streamInputIterator == 0x14)
            {
                output << 0x1d;
                output << 0x6b;
                output << 0x05;
                codeBarStarted = true;
            }

el resultado es radicalmente distinto. En el segundo caso (0xYZ), sale impreso ese valor como un numero en formato texto (ejemplo: donde dice 0x1d, sale impreso '29')

Alguien tiene alguna idea de por qué no estoy pudiendo hacer esto que quiero? CUALQUIER pista es agradecida, porque estoy perdidísimo.


En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Mandar rawData a una impresora luego de levantarla de un archivo y modificarla
« Respuesta #1 en: 22 Diciembre 2012, 23:37 pm »

0x34 es distinto de '34'. Es mas, '34' es una expresion invalida porque entre comillas simples solo se puede especificar un caracter. Si quieres asignar un numero entre comillas puedes usar '\x34' para escapar el caracter. La x indica que esta en hexadecimal.

Saludos.


En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como crear un archivo .txt para luego editarlo?
Programación Visual Basic
IvanUgu 2 2,022 Último mensaje 18 Junio 2005, 00:57 am
por IvanUgu
como mandar a llamar un archivo java externo dentro un un archivo java
Java
hacker2000 8 11,992 Último mensaje 20 Diciembre 2005, 20:35 pm
por Casidiablo
Buscar dirreccion de archivo de sonido y luego reproducirlo
Programación Visual Basic
renga73 3 1,429 Último mensaje 3 Junio 2006, 06:22 am
por Red Mx
Mandar archivo exe por socket « 1 2 »
Programación Visual Basic
grester43hck 13 4,170 Último mensaje 21 Julio 2010, 08:48 am
por grester43hck
Mandar .txt a la impresora
Java
maikmilk 3 4,227 Último mensaje 15 Junio 2012, 14:03 pm
por maikmilk
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines