当前位置: 首页 > 编程语言 > C#

如何将二进制文件转换为另一个二进制表示形式,如图像共享

时间:2023-04-11 01:17:14 C#

,并能够真正“看到”二进制代码或我想要的任何基数(十六进制)。最简单的想到的方法就是把代码输出到txt,这样我就可以检查了。最好和最简单的方法是什么?基本上我希望将二进制代码转换为我项目的图片。另外,如果我能得到一些二进制代码并将其转换为二进制文件,那就太好了。有什么方法可以做到这一点,我列出了C、C++和C#,因为它们似乎是最快的编程语言,我认为这可能需要一些时间。我想我对C的答案更感兴趣,但我主要是在寻找这背后的一些逻辑。这是将字节打包成图像的一种方法……有趣的是,如果您记录原始文件长度并使用无损图像格式,您可以稍后安全地提取二进制数据。打包为ARGB……varexefile=Directory.GetFiles(".","*.exe").First();varfi=newFileInfo(exefile);vardimension=(int)Math.Sqrt((fi.Length+1d)/4);using(varbitmap=newBitmap(dimension,dimension+2)){//将文件长度存储在第一个像素中。位图.SetPixel(0,0,Color.FromArgb((int)fi.Length));varbuffer=newbyte[fi.Length+4-fi.Length%4];Array.Copy(File.ReadAllBytes(exefile),buffer,fi.Length);整数x=1,y=0;for(varoffset=0;offset=dimension){x=0;y++;}}bitmap.Save(Path.ChangeExtension(exefile,".png"),ImageFormat.Png);}打包为黑二进制……varwidth=(int)Math.Sqrt(fi.Length*8);宽度=宽度+8-(宽度%8);varlength=(int)(fi.Length*8/width);Funcgetcolor=(b,m)=>(b&m)==m?颜色.黑色:颜色.白色;使用(varbitmap=newBitmap(width,length+1)){varbuffer=File.ReadAllBytes(exefile);整数x=0,y=0;foreach(var@byteinbuffer){bitmap.Set像素(x+0,y,getcolor(@byte,0x80));位图.SetPixel(x+1,y,getcolor(@byte,0x40));位图.SetPixel(x+2,y,getcolor(@byte,0x20));位图.SetPixel(x+3,y,getcolor(@byte,0x10));位图.SetPixel(x+4,y,getcolor(@byte,0x8));位图.SetPixel(x+5,y,getcolor(@byte,0x4));位图.SetPixel(x+6,y,getcolor(@byte,0x2));位图.SetPixel(x+7,y,getcolor(@byte,0x1));x+=8;如果(x>=宽度){x=0;y++;}}bitmap.Save(Path.ChangeExtension(exefile,".tif"),ImageFormat.Tiff);}...是的,它看到听起来像噪音我不太确定你想做什么,但听起来有点像你在寻找十六进制编辑器你可以在C#中读取文件的所有字节或任何.NET语言通过调用静态方法ReadAllBytes。byte[]allBytes=File.ReadAllBytes("YourPath");它会将所有字节放入一个数组中。如果要将其转换为十六进制,请参见此处。它已为您完成!非常方便的二进制文件已经存储在二进制文件中!刚提出你的问题,我在讨论中遇到了一些问题,但想知道实现起来有多容易。这是一个最小的实现,它为您提供当前正在执行的程序集(即您当前正在运行的EXE)的二进制输出:byte[]bytes=File.ReadAllBytes(Assembly.GetExecutingAssembly().Location);//这会变大,我们知道有多大,所以尽早分配并尽量正确//注意:换行符是两个字节StringBuildersb=newStringBuilder(bytes.Length*3+(bytes.Length/16)*4);for(inti=0;i如果您输出StringBuilder内容,您会看到以下几个字节的内容(这是我的测试可执行文件):5A90000300000004000000FFFF0000B800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1F1FBA0E00B409CD21B8014CCD215468697320726F67722063616E6E6F742062652072756E20696E2044652E0D0D0A240000000000000050这是C中打印出1和0字节的代码:#includevoidputbits(unsignedcharbyte){unsignedcharmask=0x01;for(intbit=7;bit>=0;bit--){if((mask你可以像这样在命令行上构建和运行它:海合会马in.c--std=c99-oprinter./printerprinter.txt然后会把它的1和0输出到printer.txt上面就是C#学习教程:如何把一个二进制文件转换成另一种二进制表示,比如一张图片如果分享的所有内容对您有用,需要了解更多C#学习教程,希望您多多关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: