Questione : Lima della lettura di C# nei byte, allora convertente la in stringa, allora convertente la di nuovo ai byte

Ciao, sembro avere un problema quando leggere la lima nei byte, quindi convertirla in stringa, quindi convertirla di nuovo al codice di bytes.

The sono: patito = posizione di segnale minimo del

byte [];
FileStream fs = nuovo FileStream (System.IO.Path.GetTempPath () + “/myprogram.exe„, FileMode.Open, FileAccess.Read); Br del
BinaryReader = nuovo BinaryReader (fs); numBytes del
long = nuovo FileInfo (System.IO.Path.GetTempPath () +„ /myprogram.exe "). Lunghezza;
buff = br.ReadBytes (numBytes); la codifica del

System.Text.ASCIIEncoding = nuovo System.Text.ASCIIEncoding ();

string che buffasstring = encoding.GetString (patito);
byte [] prgbk2bytes= encoding.GetBytes (buffasstring);


--il
Why è byte di prgbk2bytes è differente ai byte di programma di orignal? Come posso ottenere l'originale programmare i byte posteriori dopo la conversione esso in stringa.

Many thanks

class= del

Risposta : Lima della lettura di C# nei byte, allora convertente la in stringa, allora convertente la di nuovo ai byte


ray_code, ho provato il vostro codice sulla mia lima di .exe. Avete detto i byte prima e dopo differiscono.

La ragione per la quale differiscono:

Sotto è una linea da msdn (le codifiche di comprensione: http://msdn.microsoft.com/en-us/library/ms404377.aspx)

“•Se la vostra applicazione ha soddisfare che non è rigorosamente ASCII e non lo mette in codice con ASCIIEncoding, ogni carattere non-ASCII mette come punto interrogativo ("? "). Se l'applicazione allora decodifica questi dati, le informazioni sono perse.„

Obvioursly i dati di byte dalla lima di .exe è “non ASCII„ e le informazioni sono perse.

Che cosa è la soluzione per questo:

Sotto è una linea da msdn (codice categoria della codifica: http://msdn.microsoft.com/en-us/library/system.text.encoding.aspx)

“Se la vostra applicazione deve mettere i dati in codice binari arbitrari in testo, dovrebbe usare un protocollo quale il uuencode, che è realizzato con i metodi quale Convert.ToBase64CharArray.

I dati di byte dalla lima di .exe sono ovviamente dati binari arbitrari e dovreste considerare using la codifica Base64 preferibilmente secondo le indicazioni del codice qui sotto:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
patito = posizione di segnale minimo di byte [];
FileStream fs = nuovo FileStream (System.IO.Path.GetTempPath () + “/myprogram.exe„, FileMode.Open, FileAccess.Read);
Br di BinaryReader = nuovo BinaryReader (fs);
numBytes lunghi = nuovo FileInfo (System.IO.Path.GetTempPath () + “/myprogram.exe„). Lunghezza;
patito = br.ReadBytes (numBytes (int));

//System.Text.ASCIIEncoding che mette = nuovo System.Text.ASCIIEncoding ();

stringa che buffasstring = Convert.ToBase64String (patito);
byte [] prgbk2bytes= Convert.FromBase64String (buffasstring);
Altre soluzioni  
 
programming4us programming4us