精华内容
下载资源
问答
  • 二进制文件srcfile 转换成文本文件 targetfile,16进制显示。 二进制文件srcfile 转换文本文件 targetfile,16进制显示。 二进制文件转换文本文件 targetfile,16进制显示。 二进制文件转换文本文件,16进制显示...
  • 读取文件中的二进制文件二进制转换成文本文档并输出
  • 二进制文件转换为文本文件的工具

    千次下载 热门讨论 2012-01-12 10:31:53
    一个很有用的工具,可以将二进制文件转换为文本文件
  • 二进制文件转换成文本文件

    热门讨论 2008-08-29 14:30:27
    这是一段小程序,功能是将二进制文件(*.dat)转换成文本文件(或者Excel表格)!
  • STL文件文本(asc)和二进制(bin)两种格式。本程序提供了从二进制文本格式的转换。 STL文件文本(asc)和二进制(bin)两种格式。本程序提供了从二进制文本格式的转换。
  • 今天,项目现场提出这样一种需求:项目中,项目文件打zip包进行发布时,由于安全机制的限制,不允许发布二进制文件,因此需要.zip格式的二进制文件encode成文本文件,再将文本文件上传后decode.zip格式。...

    一、说明

    今天,项目现场提出这样一种需求:项目中,将项目文件打成zip包进行发布时,由于安全机制的限制,不允许发布二进制文件,因此需要将.zip格式的二进制文件encode成文本文件,再将文本文件上传后decode成.zip格式。

    二、直接上代码

    1、首先上传统IO实现方式

    package com.mzj.pe.codec;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    /**
     * @Auther: mazhongjia
     * @Date: 2020/9/17 11:26
     * @Version: 1.0
     */
    public interface BinaryTextCodec {
    
        String encode(FileInputStream fileInputStream) throws IOException;
    
        void decode(FileOutputStream outputStream, String text) throws IOException;
    
        public static BinaryTextCodec createBinaryTextCodec(){
            return new BinaryTextCodecImpl();
        }
    }
    
    package com..mzj.pe.codec;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    /**
     * @Auther: mazhongjia
     * @Date: 2020/9/17 11:28
     * @Version: 1.0
     */
    public class BinaryTextCodecImpl implements BinaryTextCodec {
    
        private static final String TEXT_SPLIT_CHAR = ",";
    
        @Override
        public String encode(FileInputStream fileInputStream) throws IOException {
            if (fileInputStream == null) {
                return null;
            }
            StringBuilder builder = new StringBuilder();
            int i = 0;
            while ((i = fileInputStream.read()) != -1) {
                builder.append(i + TEXT_SPLIT_CHAR);
            }
            return builder.toString();
        }
    
        @Override
        public void decode(FileOutputStream fileOutputStream, String text) throws IOException {
            if (fileOutputStream == null || text == null) {
                return;
            }
            String[] lineone = text.split(TEXT_SPLIT_CHAR);
    
            for (int j = 0; j < lineone.length; j++) {
                fileOutputStream.write(Integer.valueOf(lineone[j]));
            }
            fileOutputStream.flush();
        }
    
    
    }
    
    package com.mzj.pe.codec;
    
    import java.io.*;
    
    /**
     * @Auther: mazhongjia
     * @Date: 2020/9/17 13:55
     * @Version: 1.0
     */
    public class FileTransitionUtil {
    
        private static BinaryTextCodec binaryTextCodec = BinaryTextCodec.createBinaryTextCodec();
    
        public static void binaryToText(String binaryFilePath, String textFilePath) throws IOException {
            File binaryFile = new File(binaryFilePath);
            if (!binaryFile.exists()) {
                System.out.println("转换的二进制文件不存在....");
                return;
            }
            File textFile = new File(textFilePath);
            if (!textFile.exists())
                textFile.createNewFile();
    
            FileInputStream fileInputStream = null;
            BufferedWriter bufferedWriter = null;
    
            try {
                fileInputStream = new FileInputStream(binaryFile);
                bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(textFile)));
    
                String encoder = binaryTextCodec.encode(fileInputStream);
                if (encoder != null) {
                    bufferedWriter.write(encoder);
                    bufferedWriter.flush();
                    System.out.println("成功将【"+binaryFilePath+"】转换成文本文件【"+textFilePath+"】");
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (fileInputStream != null) {
                    try {
                        fileInputStream.close();
                    } catch (IOException ie) {
                        ie.printStackTrace();
                    }
                }
                if (bufferedWriter != null) {
                    try {
                        bufferedWriter.close();
                    } catch (IOException ie) {
                        ie.printStackTrace();
                    }
                }
            }
        }
    
    
        public static void textToBinary(String binaryFilePath, String textFilePath) throws IOException {
            File textFile = new File(textFilePath);
            if (!textFile.exists()) {
                System.out.println("转换的文本文件不存在....");
                return;
            }
            File binaryFile = new File(binaryFilePath);
            if (!binaryFile.exists())
                binaryFile.createNewFile();
    
            FileOutputStream fileOutputStream = null;
            BufferedReader bufferedReader = null;
    
            try {
                fileOutputStream = new FileOutputStream(binaryFile);
                bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(textFile)));
    
                binaryTextCodec.decode(fileOutputStream, bufferedReader.readLine());
                System.out.println("成功将【"+textFilePath+"】转换成二进制文件【"+binaryFilePath+"】");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (fileOutputStream != null) {
                    try {
                        fileOutputStream.close();
                    } catch (IOException ie) {
                        ie.printStackTrace();
                    }
                }
                if (bufferedReader != null) {
                    try {
                        bufferedReader.close();
                    } catch (IOException ie) {
                        ie.printStackTrace();
                    }
                }
            }
        }
    }
    
    package com.mzj.pe.codec;
    
    import java.io.IOException;
    
    /**
     * @Auther: mazhongjia
     * @Date: 2020/9/17 14:15
     * @Version: 1.0
     */
    public class Demo {
    
        public static void main(String[] args) throws IOException {
            FileTransitionUtil.binaryToText("D:\\埃及项目画面说明.doc","D:\\1.txt");
            FileTransitionUtil.textToBinary("D:\\1.doc","D:\\1.txt");
    
            FileTransitionUtil.binaryToText("D:\\专题图演示视频.mp4","D:\\2.txt");
            FileTransitionUtil.textToBinary("D:\\2.mp4","D:\\2.txt");
    
            FileTransitionUtil.binaryToText("D:\\17年餐费未报销.zip","D:\\3.txt");
            FileTransitionUtil.textToBinary("D:\\3.zip","D:\\3.txt");
    
    
        }
    }
    

    2、然后我自己又用NIO实现了一版

    package com.mzj.pe.codec.test;
    
    import java.nio.ByteBuffer;
    import java.nio.CharBuffer;
    import java.nio.channels.FileChannel;
    import java.nio.charset.Charset;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.nio.file.StandardOpenOption;
    
    /**
     * @Auther: mazhongjia
     * @Date: 2020/9/17 14:57
     * @Version: 1.0
     */
    public class Text {
    
        public static void main(String[] args) throws Exception {
    
            Path pathIn = Paths.get("D://原始二进制文件.zip");
            Path pathOut = Paths.get("D://1.txt");
    
            FileChannel inputChannel = FileChannel.open(pathIn, StandardOpenOption.READ);
            FileChannel outputChannel =FileChannel.open(pathOut,StandardOpenOption.WRITE);
    
            ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
    
            while (true){
                byteBuffer.clear();
    
                int read = inputChannel.read(byteBuffer);
                if(-1 == read){//此处用-1判断是否读完需要依赖上面的 byteBuffer.clear();
                    //文件读完了
                    break;
                }
    
                //读到文件中内容了,翻转缓冲区,准备get其中数据
                byteBuffer.flip();//本例中从ByteBuffer获取数据没有显示的get,而是将其作为参数传给另一个Channel的write方法,但是也是读其中的数据,所以也要进行翻转
    
                StringBuilder builder = new StringBuilder();
                while (byteBuffer.hasRemaining()){
                    builder.append(byteBuffer.get()+",");//1、将bytebuffer中数据,以字节形式取出,每个字节后追加逗号,形成字符串,以便解析字符串时时按,分割还原字节
                }
    
                CharBuffer charBuffer = CharBuffer.allocate(builder.length());//2、定义一个上面生成字符串长度的ChatBuffer
    
                charBuffer.put(builder.toString());//3、将字符串写入CharBuffer(A,B,C,D....)
                charBuffer.flip();
    
                Charset charset= Charset.defaultCharset();//4、将CharBuffer数据准备写入outputChannel,写入之前,需要转换成ByteBuffer,转换时需要按照特定字符集编码形式进行转换
                ByteBuffer byteBuffe1r=charset.encode(charBuffer);
    //            byteBuffe1r.flip();
                outputChannel.write(byteBuffe1r);//将byteBuffer中内容写入到Channel中//5、将CharBuffer的ByteBuffer数组写入outputChannel
    
    //            outputChannel.write(byteTemp);//将byteBuffer中内容写入到Channel中
            }
    
            inputChannel.close();
            outputChannel.close();
        }
    }
    
    
    package com.mzj.pe.codec.test;
    
    import java.nio.ByteBuffer;
    import java.nio.CharBuffer;
    import java.nio.channels.FileChannel;
    import java.nio.charset.Charset;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.nio.file.StandardOpenOption;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @Auther: mazhongjia
     * @Date: 2020/9/17 14:57
     * @Version: 1.0
     */
    public class Text2 {
    
        public static void main(String[] args) throws Exception {
    
            Path pathIn = Paths.get("D://1.txt");
            Path pathOut = Paths.get("D://1.zip");
    
            FileChannel inputChannel = FileChannel.open(pathIn, StandardOpenOption.READ);
            FileChannel outputChannel =FileChannel.open(pathOut,StandardOpenOption.WRITE);
    
            ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
            List<Byte> byteList = new ArrayList<>();
            while (true){
                byteBuffer.clear();
    
                int read = inputChannel.read(byteBuffer);
                if(-1 == read){//此处用-1判断是否读完需要依赖上面的 byteBuffer.clear();
                    //文件读完了
                    break;
                }
    
                //读到文件中内容了,翻转缓冲区,准备get其中数据
                byteBuffer.flip();//本例中从ByteBuffer获取数据没有显示的get,而是将其作为参数传给另一个Channel的write方法,但是也是读其中的数据,所以也要进行翻转
    
                while(byteBuffer.hasRemaining()){
                    byteList.add(byteBuffer.get());
                }
            }
            byte[] bytes = new byte[byteList.size()];
            for (int ii=0;ii<bytes.length;ii++){
                bytes[ii] = byteList.get(ii);
            }
    
            //1、这里的data,是A,B,C...的字符串形式,也就是原始二进制文件的byte数组的字符串逗号分割形式
            String data = new String(bytes,Charset.defaultCharset());//这一步是通过文本的字节数组形式,获取文本内容//2、将文本文件中字节还原成A,B,C,....形式,这里相当于decode,解码字符集要与编码保持一致
    
            //3、下面是还原原二进制文件的字节数组:byte2s
            String[] dataspliet = data.split(",");
            byte[] byte2s = new byte[dataspliet.length];
    
            for (int ii=0;ii<byte2s.length;ii++){
                byte2s[ii] = Byte.valueOf(dataspliet[ii]);
            }
    
            //4、下面是根据原二进制文件字节数组封装ByteBuffer
            ByteBuffer byteBufferWrite = ByteBuffer.allocate(byte2s.length);
    
            byteBufferWrite.put(byte2s);
    
            byteBufferWrite.flip();
            //5、将字节数组写入outputChannel
            outputChannel.write(byteBufferWrite);//将byteBuffer中内容写入到Channel中
    
    //            outputChannel.write(byteTemp);//将byteBuffer中内容写入到Channel中
    
            inputChannel.close();
            outputChannel.close();
        }
    }
    
    

     

    展开全文
  • 首先要清楚文件里,储存的数据的类型,是int,long,longlong还是float,double 其次文件有无字节序(大小端)问题 ...fopen,二进制读方式,打开文件,fread读取文件,fclose关闭文件 然后转换十进制ACII格式的数据...

    首先要清楚文件里, 储存的数据的类型,是int,long,long long 还是 float,double
    其次文件有无字节序(大小端)问题
    这两个问题解决了
    直接按照数据类型定义一个定长数据,或者数组一次性读入,或者分批读入全部文件。
    需要的话,读取以后,先转换一下字节顺序
    fopen,二进制读方式,打开文件,fread 读取文件,fclose 关闭文件

    然后 转换成十进制 ACII格式的数据,输出到文本文件中去。
     fopen,文本写方式,打开文件,fprintf 写入文件,fclose 关闭文件。

    基本上就可以了

    具体可以了解一下 fopen,fread,fwrie,fclose , fprintf ,fscanf  
    这些C流式文件读写,打开,关闭函数

    这些都是C标准库的函数,使用的时候 #include <stdio.h> 就可以了


    C++ 可以用C++流 std::fstream ,std::ifstream,std::ofstream 做同样的事情。
    使用的时候
    #include <fstream>

     

    为什么用笔记本打开二进制文件会出现乱码现象?

    What exactly causes binary file “gibberish”?

    问题:

    I haven't found an answer to this particular question; perhaps there isn't one. But I've been wondering for a while about it.

    What exactly causes a binary file to display as "gibberish" when you look at it in a text editor? It's the same thing with encrypted files. Are the binary values of the file trying to be converted into ASCII? Is it possible to convert the view to display raw binary values, i.e. to show the 1s and 0s that make up the file?

    Finally, is there a way to determine what program will properly open a data file? Many times, especially with Windows, a file is orphaned or otherwise not associated w/ a particular program. Opening it in a text editor sometimes tells you where it belongs but most of the time doesn't, due to the gibberish. If the extension doesn't provide any information, how can you determine what program it belongs to?

    回答:

    • Are the binary values of the file trying to be converted into ASCII?

    Yes, that's exactly what's happening. Typically, the binary values of the file also include ASCII control characters that aren't printable, resulting in even more bizarre display in a typical text editor.

    • Is it possible to convert the view to display raw binary values, i.e. to show the 1s and 0s that make up the file?

    It depends on your editor. What you want is a "hex editor", rather than a normal text editor. This will show you the raw contents of the file (typically in hexadecimal rather than binary, since the zeros and ones would take up a lot of space and be harder to read).

    • Finally, is there a way to determine what program will properly open a data file?

    There is a Linux command-line program called "file" that will attempt to analyze the file (typically looking for common header patterns) and tell you what sort of file it is (for example text, or audio, or video, or XML, etc). I'm not sure if there is an equivalent program for Windows. Of course, the output of this program is just a guess, but it can be very useful when you don't know what the format of a file is.

     

    示例代码:读入二进制文件再写到文本中去

    在这个例子中,二进制文本大概长这样:F1 D3 35 C4 35 38 3E ...

    它实质上记录的是float型的数据(float占4个字节,即每4个字节表示一个十进制里的float数据)。每个float数据其实是一个三维坐标点的一个坐标值。在下面的代码中,每次连续读入三个float值从而得到一个坐标点。主要用到函数是:

    istream& read(char* buffer, int count);

    这个函数表示从文件流中读数据,读多少呢?读取count个字节的数据;存到哪呢?存到参数buffer指向的内存位置。注意这个内存位置由一个字符指针表示(上面的第一个参数),在必要的时候需要强制类型转换。一般我们先定义一个变量用于保存,比如在下面代码中该参数为&coordinates[i]。每完成一次读操作,文件读指针就往后移动相应的字节。

     

    代码:

    #include <fstream>
    #include <iostream>
    using namespace std;
    
    int main(){
       //把一个数据点的三个坐标放到一个float数组中
       const int num_of_coord = 3;
       float coordinates[num_of_coord]={0.};
       
       const char* InFileName = "data.log";
       const char* OutFileName = "data.txt";
     
       //用构造函数创建文件流对象,以二进制方式读入,以文本方式写出
       ifstream infile(InFileName, ios::binary);
       ofstream outfile(OutFileName);
    
       if(!(infile && outfile)){
          cout<<"open file error"<<endl;
          return -1;
       }
       
       while(!infile.eof()){
          //每次循环读入三个坐标值,每个坐标值对应的二进制数据长度其实就是float的字节数
          for(int i=0; i<num_of_coord; i++){
             infile.read((char*)&coordinates[i], sizeof(float));
             cout<<coordinates[i]<<", ";
          }
          cout<<endl;
    
          for(int i=0; i<num_of_coord; i++)
             outfile<<coordinates[i]<<", ";
          outfile<<endl;  //每输出一个点的三个坐标值,换行一次
       }
    
       infile.close();
       outfile.close();
       return 0;
    }
    

    这里稍微解释一下infile.read((char*)&coordinates[i], sizeof(float));:

    coordinates[i]实际上就是个float类型,&coordinates[i]就是取它的内存地址,换句话说是指向float(4个字节)的类型指针。(char*)&coordinates[i]是加上强制类型转换,将该地址由float*转换为char*,指针类型转换为指向一个字节的字符指针。想想这是为什么?

     

    下面这个链接用一个简单例子说明了c++二进制文件读取和写出的用法

    c.biancheng.net/view/302.html

     

    展开全文
  • 将二进制文件方便的16进制文本,方便查看
  • 二进制文件转化成文本文件

    万次阅读 2019-06-20 11:13:46
    文本文件和二进制文件的区别在于打开这个文件的程序在对文件内容的解释上。 如果是文本文件,使用任何一种文本编辑器打开可以展现出人类可读信息字符,编码都符合某种编码方式,如ASCII、UTF8、GB2312等 如果是...

    1.区别

    我们说这个文件是二进制文件,这个是文本文件,视角就是从打开这个文件程序在对文件内容的解释上。

    我们使用一般的文本编辑器打开文本文件,看到的是我们认识的字符。

    打开二进制文件,可能根本就打不开。

    (而从计算机本身的存储的视角来看,文本文件和二进制文件都是文件,都是存储在电脑上的都是0101的二进制。只不过文本文件是把字符用某种方式解码成对应的0101这种。)

    如果是文本文件,使用任何一种文本编辑器打开可以展现出人类可读信息字符,因为编码都符合某种编码方式,如ASCII、UTF8、GB2312等等。(关于编码方式不了解可以看这一篇

    如果是二进制文件,肯定没有编码方式,使用某些文本编辑器可以打开,展现出来的就是一些乱七八糟的字符。而是需要特殊的软件进行打开才是正确的打开方式。

    使用UtralEdit可以显示原始的二进制文件,显示的就是原始16进制。右侧自动选了一种编码方式进行翻译成文本,比如他自动选择的就是GBK,显示出来就是乱码。

    下图的例子使用UtralEdit打开的一个png格式的文件(也就是图片,本质上也是一个二进制文件):

    (疑问:为什么utraledit 选择了另外一种编码方式的时候 左边的二进制的值也变了??) 

    有些二进制文件使用通用的规范进行编码,有一定的标准,比如常见的图片格式JPEG,PNG,使用看图软件就能正常打开显示出图片的样子

    有些二进制文件编码格式是程序自定义规范进行编码,对于这种二进制,只有程序的开发者自己知道该文件所对应的编码规范,进行解码使用。

    可执行文件,也是文件,也是二进制文件,而对这种文件的解析就需要操作系统的参与了,涉及到可执行文件的装载等,也是有一个的规范的。可以查看《程序员的自我修养》下的文章)

    2.如何修改二进制文件-Vim

    使用vim修改:

    vim -b 文件名

    :%!xxd ——转化成16进制

    然后进行修改二进制

    :%!xxd -r——转回去

    :wq

    在Linux下使用vim配合xxd查看并编辑二进制文件 - killkill - 博客园

    3.如何把二进制文件转化成其他文本文件,从而搜索ASCII字符

    1.先使用iconv命令://IGNORE忽略那些翻译不了的

    iconv -f GB2312 -t UTF-8//IGNORE {} -o $filename.text

    Linux命令(35)——iconv命令 - 云+社区 - 腾讯云

    2.再使用grep 对 *.text 进行搜索想要查找的ASCII字符

    展开全文
  • 然后再将二进制文件还原并存入a3.txt文件。 具体代码如下: #include #include #include #define NSIZE 8 void print_2(int val2); /***********文本文件二进制**********/ void Text2Bin(const char* sIn,...
  • 很好用的转换工具,简单方便。如果好用请推荐,已用过,也是转发。
  • 如有的话,多谢
    如有的话,多谢
    展开全文
  • 华为CDR话单二进制文件转换对应的可读文件txt。资源中包含了两个文件,一个是解析话单的 T.java 文件,另一个是封装解析出来数据所对应的java Bean。
  • 二进制-文本工具

    2017-12-05 16:11:43
    基于MFC编写的二进制文本相互转换小工具,可实现将二进制格式存储的0x12 34转换成文本"12 34"(Ascii码),也可以将文本的"12 34"(Ascii码)转换成二进制的0x12 34。
  • 二进制文本小工具(含示例)。支持windowsxp、windows7操作系统;支持字节、字、双字转换;支持大小端转换;python编写。
  • 主要介绍了php实现二进制文本相互转换的方法,实例分析了文本与数制转换的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • 内容为十六进制的文本文件转换成二进制内容的bin文件
  • 十六进制的文本文件,转为十六进制格式的二进制文件。 从第一个有效字符开始,每2个有效字符(即0~F)输出一个格式化字节,"0x"、"\r\n"、空格等字符会被跳过。
  • 点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点个在看或点个赞,感谢~工作与写公众号的时间仍在平衡中......今天和大家分享一个十六进制文本转成十六进制字符并存储到二进制...
  • 文本文件转换成二进制文件

    热门讨论 2010-09-29 19:11:57
    把纯文本文件转化成二进制文件存储到一个.c文件里 .c文件的数组里是二进制的内容
  • 二进制文件查看工具,可以查看二进制文件,可设计长度对数据进行对齐,检查数据,进行数据分析必不可少的小软件
  • //将文件读取为流格式 Stream expectedSteam = new FileStream(scriptpath, FileMode.Open, FileAccess.Read); //创建Byte数组 byte[] bl = new byte[expectedSteam.Length]; //读取流文件字节,保存到对象...//二进制
  • C语言文本文件与二进制文件转换

    千次阅读 2019-07-13 19:19:05
    本程序要自己创建个文本格式的输入文件a1.txt,...然后再将二进制文件还原并存入a3.txt文件。实现文件之间的转换。 具体代码如下: #include <cstdio> #include <stdio.h> ...
  • // 然后操作每一个byte, 把他转换hex后添加到缓冲区中. bytes.foreach(b => hexBuffer.append(toHexFromByte(b))) hexBuffer.toString } @throws[IOException] def main(args: Array[String]): Unit = { ...
  • 二进制文件转文本工具

    千次阅读 2018-12-24 18:00:26
    自:blog.chinaunix.net/uid-13889805-id-5791356.html import tkinter as tk from tkinter import ttk import tkinter.filedialog ...#选择文件按钮的处理 def selectFile(): resultlabel.confi...
  • 十六进制与二进制代码文件相互转换工具,Windows标准窗口,不似其它类似工具只工作在命令行模式下。可相互转换的格式有Intel HEX格式, Motorola S19格式,二进制BIN格式。有代码查看窗口,可直接查看代码。
  • 自己写的关于将二进制文件转换为十六进制并显示的小工具,也可以保存为文本文件。
  • 在SQL Server 数据库中,如何实现二进制数据与字符串数据之间的直接转换
  • 主要介绍了java判断一个文件是否为二进制文件的方法,涉及java针对文件的读取及编码判断技巧,具有一定参考借鉴价值,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 358,216
精华内容 143,286
关键字:

将二进制文件转成文本