Vraag : Het dossier van de Lezing van C# in bytes die, dan het omzetten in koord dat, dan het omzet terug naar bytes

Hallo, schijn ik om een probleem te hebben wanneer het lezen van dossier in bytes, dan omzettend het in koord, dan is het omzetten van het terug naar code bytes.

The: bleekgele

byte [] = verklaart nietig;
FileStream fs = nieuwe FileStream (System.IO.Path.GetTempPath () + „/myprogram.exe“, FileMode.Open, FileAccess.Read);
BinaryReader br = nieuwe BinaryReader (fs);
long numBytes = nieuwe FileInfo (System.IO.Path.GetTempPath () +“ /myprogram.exe "). Lengte;
buff = br.ReadBytes ((int.) numBytes);

System.Text.ASCIIEncoding = nieuwe System.Text.ASCIIEncoding () coderen;

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


--
Why zijn de bytes prgbk2bytes zijn verschillend aan de bytes van het orignalprogramma? Hoe ik de originele programmabytes kan terugkrijgen na het omzetten van het in koord.

Many thanks

Antwoord : Het dossier van de Lezing van C# in bytes die, dan het omzetten in koord dat, dan het omzet terug naar bytes


ray_code, probeerde ik uw code inzake mijn .exe dossier. Zoals u zei vóór en na verschillen de bytes.

De reden waarom zij verschillen:

Hieronder is een lijn van msdn die (het Coderen begrijpt: http://msdn.microsoft.com/en-us/library/ms404377.aspx)

„•Als uw toepassing inhoud heeft die strikt geen ASCII is en het met ASCIIEncoding codeert, codeert elk karakter niet-ASCII als vraagteken (“? „). Als de toepassing dan dit gegeven decodeert, wordt de informatie verloren.“

Obvioursly de bytegegevens van het .exe dossier is „niet ASCII“ en de informatie wordt verloren.

Wat de oplossing voor dit is:

Hieronder is een lijn van msdn (Coderende klasse: http://msdn.microsoft.com/en-us/library/system.text.encoding.aspx)

„Als uw toepassing willekeurige binaire gegevens in tekst moet coderen, zou het een protocol zoals uuencode moeten gebruiken, die door methodes zoals Convert.ToBase64CharArray.“ wordt uitgevoerd

Duidelijk zijn de bytegegevens van het .exe dossier willekeurig binair gegeven en u zou moeten nadenken gebruikend Base64 in plaats daarvan coderend zoals aangetoond in de code hieronder:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
de bleekgele byte [] = verklaart nietig;
FileStream fs = nieuwe FileStream (System.IO.Path.GetTempPath () + „/myprogram.exe“, FileMode.Open, FileAccess.Read);
BinaryReader br = nieuwe BinaryReader (fs);
lange numBytes = nieuwe FileInfo (System.IO.Path.GetTempPath () + „/myprogram.exe“). Lengte;
bleekgeel = br.ReadBytes ((int.) numBytes);

//System.Text.ASCIIEncoding dat = nieuwe System.Text.ASCIIEncoding codeert ();

koord dat = (bleekgele) Convert.ToBase64String buffasstring;
byte [] prgbk2bytes= Convert.FromBase64String (het buffasstring);
Andere oplossingen  
 
programming4us programming4us