C# 在C中读取exe文件作为二进制文件#

C# 在C中读取exe文件作为二进制文件#,c#,exe,binaryfiles,C#,Exe,Binaryfiles,我想在我的C代码中读取一个exe文件,然后将其解码为base64 我是这样做的 FileStream fr = new FileStream(@"c:\1.exe", FileMode.Open, FileAccess.Read, FileShare.Read); StreamReader sr = new StreamReader(fr); fr.Read(data, 0, count); 但问题是,当我写这个文件时,写的文件会被破坏。 在十六进制中分析时,十六进制中的车间代码值20将替换为

我想在我的C代码中读取一个exe文件,然后将其解码为base64

我是这样做的

FileStream fr = new FileStream(@"c:\1.exe", FileMode.Open, FileAccess.Read, FileShare.Read);
StreamReader sr = new StreamReader(fr);
fr.Read(data, 0, count);
但问题是,当我写这个文件时,写的文件会被破坏。
在十六进制中分析时,十六进制中的车间代码值20将替换为0。

StreamReader官方文档:

“实现一个文本读取器,该读取器以特定编码从字节流中读取字符。”


它用于文本,而不是二进制文件。尝试使用流或二进制读取器。。(为什么尝试StreamReader?

StreamReader应仅用于文本文件。对于二进制文件,您需要直接使用文件流或:

byte[] buffer = File.ReadAllBytes(@"c:\1.exe");
string base64Encoded = Convert.ToBase64String(buffer);
// TODO: do something with the bas64 encoded string

buffer = Convert.FromBase64String(base64Encoded);
File.WriteAllBytes(@"c:\2.exe", buffer);

说实话,如果你要读和/或写一个EXE,最好把它当作一堆字节。Base64编码带来的问题比它解决的问题还要多——字符串变得几乎不透明,为了获取数据,您必须进行一些转换和巧妙的位移位。@cHao,完全同意您的看法。只是行动的意图还不清楚。他谈到了Base64字符串,所以我只展示了一个示例。注意:为什么创建了一个StreamReader却从未使用过它?