Pergunta

Eu tenho um problema tring para gravar em um arquivo binário.

//This is preparing the counter as binary
int nCounterIn = ...;
int nCounterTotalInNetwork = System.Net.IPAddress.HostToNetworkOrder(nCounterIn);
byte[] byteFormat = BitConverter.GetBytes(nCounterTotalInNetwork);
char[] charFormat = System.Text.ASCIIEncoding.ASCII.GetChars(byteFormat);
string strArrResults = new string(charFormat);

//This is how writing it to a file using a BinaryWriter object

m_brWriter.Write(strArrResults.ToCharArray());
m_brWriter.Flush();

O problema é que ele escreve para o arquivo incorretamente. Na maioria das vezes ele grava informações corretamente, mas uma vez que supera 127 escreve 63 (3Fthe representação errada) até 255.

Em seguida, ele repete este erro até 512.

O que poderia o bug ser?

Foi útil?

Solução

Isso é porque você está codificação com ASCII, que é de 7 bits, ele irá cortar a 8ª pouco e configurá-lo para 0.

Por que você fazê-lo desta maneira? Eu estou tentando obter minha cabeça em torno do que você está fazendo lá.

Por que você não simplesmente escrever a matriz de bytes que você obtém em vez de codificação-lo?

Em outras palavras, por que não usar esse código?

//This is preparing the counter as binary
int nCounterIn = ...;
int nCounterTotalInNetwork = System.Net.IPAddress.HostToNetworkOrder(nCounterIn);
byte[] byteFormat = BitConverter.GetBytes(nCounterTotalInNetwork);
m_brWriter.Write(byteFormat);
m_brWriter.Flush();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top