2011-03-02 13 views
8

Estoy produciendo una matriz de caracteres sin firmar en C++ usando ofstream fout("filename"); pero produce un carácter espurio en el medio. Esta es la parte del código que hace que el problema:¿Por qué ofstream inserta un byte 0x0D antes de 0x0A?

for(int i = 0; i < 12; i++) 
fout << DChuffTable[i]; 

y esta es la definición de la matriz:

unsigned char DChuffTable[12] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B}; 

En el archivo de salida me sale una espuria 0x0D entre 0x09 y 0x0A. Revisé la matriz en modo de depuración justo antes de que se imprima y no se modificó. Por favor, dime qué piensas de este problema.

Respuesta

21

Su flujo se abre en modo texto, y desde 0x0A es el carácter de avance de línea (LF), que está siendo convertido por el torrente de 0x0D0x0A, es decir, CR/LF.

Abra su funcionamiento en modo binario:

std::ofstream fout("filename", std::ios_base::out | std::ios_base::binary); 

conversiones Luego de final de línea no debe realizarse.

Esto generalmente se considera una buena idea de todos modos, ya que las transmisiones pueden ser extrañas w.r.t. enjuague cuando está en modo texto.

+0

Muchas gracias, no pensé en ese problema. Aunque sospecho que este problema no ocurre en Linux. ¿derecho? – raven

+0

@raven: Se aplica el mismo escenario, pero dado que los sistemas Unix usan "\ n" como una línea que termina de todos modos, de hecho no habrás notado ningún síntoma. Sin embargo, sigue siendo un código roto. :) –

Cuestiones relacionadas