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..
por otro lado, en la parte de
si lo cambio por
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.
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 [Seleccionar]
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 [Seleccionar]
if(*streamInputIterator == 0x14)
{
output << '1d';
output << '6b';
output << '05';
codeBarStarted = true;
}
si lo cambio por
Código [Seleccionar]
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.