C #, a gravação de dados binários
-
11-09-2019 - |
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
(3F
the representação errada) até 255
.
Em seguida, ele repete este erro até 512
.
O que poderia o bug ser?
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