And*_*i S 7 c# string binaryfiles
我正在尝试将二进制文件(例如可执行文件)读入字符串,然后将其写回
FileStream fs = new FileStream("C:\\tvin.exe", FileMode.Open);
BinaryReader br = new BinaryReader(fs);
byte[] bin = br.ReadBytes(Convert.ToInt32(fs.Length));
System.Text.Encoding enc = System.Text.Encoding.ASCII;
string myString = enc.GetString(bin);
fs.Close();
br.Close();
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
byte[] rebin = encoding.GetBytes(myString);
FileStream fs2 = new FileStream("C:\\tvout.exe", FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs2);
bw.Write(rebin);
fs2.Close();
bw.Close();
Run Code Online (Sandbox Code Playgroud)
这不起作用(结果具有完全相同的字节大小但无法运行)
如果我做bw.Write(bin)结果没问题,但我必须将它保存为字符串
ang*_*son 17
当您将字节解码为字符串,并将它们重新编码为字节时,您将丢失信息.ASCII尤其是因为ASCII为这是一个非常糟糕的选择会抛出很多关于信息的方式,但可能会丢失信息时,编码和解码,无论编码,你的类型的挑选,所以你不是在正确的道路上.
你需要的是BaseXX例程之一,编码的二进制数据可打印字符,通常用于存储或传输通过一个介质,只允许文本(电子邮件,新闻组想到的.)
Ascii85就是这样一种算法,该页面包含指向不同实现的链接.它具有4:1的比率(在尺寸增加了25%)5含义4个字节将被编码为5个字符
如果不出意外,.NET中已经内置了一个Base64编码例程.它的比例为3:4(尺寸增加33%),这里:
以下是使用这些方法的代码:
string myString;
using (FileStream fs = new FileStream("C:\\tvin.exe", FileMode.Open))
using (BinaryReader br = new BinaryReader(fs))
{
byte[] bin = br.ReadBytes(Convert.ToInt32(fs.Length));
myString = Convert.ToBase64String(bin);
}
byte[] rebin = Convert.FromBase64String(myString);
using (FileStream fs2 = new FileStream("C:\\tvout.exe", FileMode.Create))
using (BinaryWriter bw = new BinaryWriter(fs2))
bw.Write(rebin);
Run Code Online (Sandbox Code Playgroud)