精华内容
下载资源
问答
  • 汉字转换二进制工具

    热门讨论 2009-04-25 02:46:01
    汉字转换二进制工具 jar格式 小巧、方便、绿色
  • 二进制-文本互转工具

    2017-12-05 16:11:43
    基于MFC编写的二进制和文本相互转换小工具,可实现将二进制格式存储的0x12 34转换成文本"12 34"(Ascii码),也可以将文本的"12 34"(Ascii码)转换成二进制的0x12 34。
  • Excel 转二进制工具

    2018-12-12 16:54:06
    C# 开发的Excel转为游戏中可读取的二进制文件的工具,是游戏开发中给策划使用的基本工具之一,该工具经过多个商业项目验证,有很高的使用价值和参考价值
  • 字符二进制编码转换工具

    热门讨论 2011-01-05 22:03:49
    字符和的转换工具 字符和二进制的转换工具
  • 工具主要可以打开二进制文本工具,常用物理磁盘、逻辑磁盘进行二进制数据分析。博主用该工具主要分析定位fat32文件系统的某个文件,具体的博客教程地址:...
  • 二进制文件转换为文本文件的工具

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

    千次阅读 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 import threading import os #选择文件按钮的处理 def selectFile(): ...

    转自:blog.chinaunix.net/uid-13889805-id-5791356.html

    import tkinter as tk
    from tkinter import ttk
    import tkinter.filedialog
    import threading
    import os
    
    #选择文件按钮的处理
    def selectFile():
        resultlabel.configure(text="", wraplength=600)
        selectfile = tkinter.filedialog.askopenfilename()
        if selectfile != '':
            s_entry.delete(0,tk.END)
            s_entry.insert(0,selectfile)
    
        src_file=s_entry.get()
        if src_file != '':
            target_file=src_file+".txt"
            t_entry.delete(0, tk.END)
            t_entry.insert(0,target_file)
            convert_button.configure(state="enable")
        else:
            t_entry.delete(0, tk.END)
            convert_button.configure(state="disabled")
    
    
    def bin2hextext(srcfile,targetfile):
    #二进制文件srcfile 转换成文本文件 targetfile,16进制显示,带偏移
        i=1
        try:
            fsrc=open(srcfile,mode='rb')
            ftarget= open(targetfile, mode='w')
            iBytes = fsrc.read()
            print("%08x:" % 0, file=ftarget, end='')
            for s_byte in iBytes:
                print("%02x" % s_byte,file = ftarget,end='')
    
                if i%16 == 0:
                    print("" , file=ftarget)
                    print("%08x:" % i, file=ftarget,end='')
                #刷新文件缓存 显示进度
                if i%(128*1024) == 0:
                    status = ('%.2f%%' % ((i/(os.path.getsize(srcfile)) * 100)) )
                    ftarget.flush()
                    resultlabel.configure(text=status)
                i += 1
            fsrc.close()
            ftarget.close()
            return "Convert file successfully"
        except (OSError,TypeError) as reason:
            return "Error"+str(reason)
    
    #创建线程进行处理 防止界面卡死
    def convert_thread_func(src,target):
        res = bin2hextext(src, target)
        resultlabel.configure(text=res, wraplength=600)
        convert_button.configure(state="enable")
    
    #转换按键的处理
    def convert_func():
        convert_button.configure(state="disabled")
        resultlabel.configure(text="Processing ... ", wraplength=600)
        sf = s_entry.get()
        tf = t_entry.get()
        t=threading.Thread(target=convert_thread_func,args=(sf,tf))
        t.start()
    
    
    root=tk.Tk()
    root.title("bin2text V0.1 by: deep_pro") #第一个版本 2018-10-04
    tkinter.Label(root,text="source file:").grid(row=0,column=0)
    tkinter.Label(root,text="target file:").grid(row=1,column=0)
    tkinter.Label(root,text=" result :").grid(row=2,column=0)
    resultlabel=tkinter.Label(root,fg="red",text=" ")
    resultlabel.grid(row=2,column=1)
    s_entry=tkinter.Entry(width=99)
    t_entry=tkinter.Entry(width=99)
    s_entry.grid(row=0,column=1)
    t_entry.grid(row=1,column=1)
    
    ttk.Label(root,text=" ").grid(row=0,column=2)
    ttk.Label(root,text=" ").grid(row=1,column=2)
    src_button=ttk.Button(root,text="open",width=8,command = selectFile).grid(row=0,column=3)
    convert_button=ttk.Button(root,text="convert",width=8,state="disabled",command=convert_func)
    convert_button.grid(row=1,column=3)
    
    root.mainloop()
    
    #打包
    #pyinstaller -F test.py --noconsole -i 32.ico 
    

    ps:写博客的都用的是chrome么,microsoft edge体验极差!!!

    展开全文
  • 二进制与文本互工具(含示例)。支持windowsxp、windows7操作系统;支持字节、字、双字转换;支持大小端转换;python编写。
  • Linux下的二进制文件比较工具

    千次阅读 2018-11-14 13:58:23
    Linux下的二进制文件比较工具

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                           因为要用到二进制文件比较工具,所以就找了一些,总结一下。

    0. diff

           只会说“相同不或者相同”,不是我要的效果。

    1.vimdiff -b

           能比较,但是显示还是按照字符来显示的,所以显示基本是乱码。

    2.WinMerge for Linux 

           下载好了,但是没有编译成功。

    3.UE:
     
          目前linux版本还不支持二进制比较,因为在比较前时选择的时候,二进制那一栏是灰的。

    4.Meld:

           如果是二进制文件,就会提示“你打开的似乎是二进制文件”。看意思是不支持了。

    5.Araxis Merge

           比较好,但是目前没有linux版本。

    6.Bcompare:
     
          用起来不错,选的就是它了。(下载地址:http://download.csdn.net/detail/kangear/5498409

               

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

    新的改变

    我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

    1. 全新的界面设计 ,将会带来全新的写作体验;
    2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
    3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
    4. 全新的 KaTeX数学公式 语法;
    5. 增加了支持甘特图的mermaid语法1 功能;
    6. 增加了 多屏幕编辑 Markdown文章功能;
    7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
    8. 增加了 检查列表 功能。

    功能快捷键

    撤销:Ctrl/Command + Z
    重做:Ctrl/Command + Y
    加粗:Ctrl/Command + B
    斜体:Ctrl/Command + I
    标题:Ctrl/Command + Shift + H
    无序列表:Ctrl/Command + Shift + U
    有序列表:Ctrl/Command + Shift + O
    检查列表:Ctrl/Command + Shift + C
    插入代码:Ctrl/Command + Shift + K
    插入链接:Ctrl/Command + Shift + L
    插入图片:Ctrl/Command + Shift + G

    合理的创建标题,有助于目录的生成

    直接输入1次#,并按下space后,将生成1级标题。
    输入2次#,并按下space后,将生成2级标题。
    以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

    如何改变文本的样式

    强调文本 强调文本

    加粗文本 加粗文本

    标记文本

    删除文本

    引用文本

    H2O is是液体。

    210 运算结果是 1024.

    插入链接与图片

    链接: link.

    图片: Alt

    带尺寸的图片: Alt

    当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

    如何插入一段漂亮的代码片

    博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

    // An highlighted block var foo = 'bar'; 

    生成一个适合你的列表

    • 项目
      • 项目
        • 项目
    1. 项目1
    2. 项目2
    3. 项目3
    • 计划任务
    • 完成任务

    创建一个表格

    一个简单的表格是这么创建的:

    项目 Value
    电脑 $1600
    手机 $12
    导管 $1

    设定内容居中、居左、居右

    使用:---------:居中
    使用:----------居左
    使用----------:居右

    第一列 第二列 第三列
    第一列文本居中 第二列文本居右 第三列文本居左

    SmartyPants

    SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

    TYPE ASCII HTML
    Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
    Quotes "Isn't this fun?" “Isn’t this fun?”
    Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

    创建一个自定义列表

    Markdown
    Text-to-HTML conversion tool
    Authors
    John
    Luke

    如何创建一个注脚

    一个具有注脚的文本。2

    注释也是必不可少的

    Markdown将文本转换为 HTML

    KaTeX数学公式

    您可以使用渲染LaTeX数学表达式 KaTeX:

    Gamma公式展示 Γ(n)=(n1)!nN\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N 是通过欧拉积分

    Γ(z)=0tz1etdt . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.

    你可以找到更多关于的信息 LaTeX 数学表达式here.

    新的甘特图功能,丰富你的文章

    gantt
            dateFormat  YYYY-MM-DD
            title Adding GANTT diagram functionality to mermaid
            section 现有任务
            已完成               :done,    des1, 2014-01-06,2014-01-08
            进行中               :active,  des2, 2014-01-09, 3d
            计划一               :         des3, after des2, 5d
            计划二               :         des4, after des3, 5d
    
    • 关于 甘特图 语法,参考 这儿,

    UML 图表

    可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

    张三李四王五你好!李四, 最近怎么样?你最近怎么样,王五?我很好,谢谢!我很好,谢谢!李四想了很长时间,文字太长了不适合放在一行.打量着王五...很好... 王五, 你怎么样?张三李四王五

    这将产生一个流程图。:

    链接
    长方形
    圆角长方形
    菱形
    • 关于 Mermaid 语法,参考 这儿,

    FLowchart流程图

    我们依旧会支持flowchart的流程图:

    • 关于 Flowchart流程图 语法,参考 这儿.

    导出与导入

    导出

    如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

    导入

    如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
    继续你的创作。


    1. mermaid语法说明 ↩︎

    2. 注脚的解释 ↩︎

    展开全文
  • 这里写自定义目录标题如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建...# 二进制与十进制转换 number_10 = int(input('请输入一个十进制数字:')) number_100 =...

    # 二进制与十进制转换
    number_10 = int(input('请输入一个十进制数字:'))
    number_100 = number_10 # 最后需要重新调用number_10,因此这里算是找一个替身被操作
    k = 0; i = 0 ; ii = 0
    sequence = []
    while i != 1 or (i == 1 and (k > 1)):
        i = number_100 % 2   # 取余数
        k = number_100 // 2  # 取整数
        number_100 = k
        sequence.append(i)  # 将一个个得到的数字写入目标列表
    sequence.reverse()      # 将目标列表逆向转置
    sequence_list = [str(ii) for ii in sequence ] # 将数字列表转换为字符串列表
    Sequence = ''.join(sequence_list)             # 去除中括号
    print("十进制数%d对应的二进制结果是%s" % (number_10, Sequence)) # number_100在操作中已经被改变,因此需要number_10
    
    
    

    Alt

    带尺寸的图片: Alt

    居中的图片: Alt

    居中并且带尺寸的图片: Alt

    当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

    如何插入一段漂亮的代码片

    博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

    // An highlighted block
    var foo = 'bar';
    

    生成一个适合你的列表

    • 项目
      • 项目
        • 项目
    1. 项目1
    2. 项目2
    3. 项目3
    • 计划任务
    • 完成任务

    创建一个表格

    一个简单的表格是这么创建的:

    项目 Value
    电脑 $1600
    手机 $12
    导管 $1

    设定内容居中、居左、居右

    使用:---------:居中
    使用:----------居左
    使用----------:居右

    第一列 第二列 第三列
    第一列文本居中 第二列文本居右 第三列文本居左

    SmartyPants

    SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

    TYPE ASCII HTML
    Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
    Quotes "Isn't this fun?" “Isn’t this fun?”
    Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

    创建一个自定义列表

    Markdown
    Text-to-HTML conversion tool
    Authors
    John
    Luke

    如何创建一个注脚

    一个具有注脚的文本。1

    注释也是必不可少的

    Markdown将文本转换为 HTML

    KaTeX数学公式

    您可以使用渲染LaTeX数学表达式 KaTeX:

    Gamma公式展示 Γ(n)=(n1)!nN\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N 是通过欧拉积分

    Γ(z)=0tz1etdt. \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.

    你可以找到更多关于的信息 LaTeX 数学表达式here.

    新的甘特图功能,丰富你的文章

    Mon 06Mon 13Mon 20已完成 进行中 计划一 计划二 现有任务Adding GANTT diagram functionality to mermaid
    • 关于 甘特图 语法,参考 这儿,

    UML 图表

    可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

    张三李四王五你好!李四, 最近怎么样?你最近怎么样,王五?我很好,谢谢!我很好,谢谢!李四想了很长时间,文字太长了不适合放在一行.打量着王五...很好... 王五, 你怎么样?张三李四王五

    这将产生一个流程图。:

    链接
    长方形
    圆角长方形
    菱形
    • 关于 Mermaid 语法,参考 这儿,

    FLowchart流程图

    我们依旧会支持flowchart的流程图:

    Created with Raphaël 2.2.0开始我的操作确认?结束yesno
    • 关于 Flowchart流程图 语法,参考 这儿.

    导出与导入

    导出

    如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

    导入

    如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
    继续你的创作。


    1. 注脚的解释 ↩︎

    展开全文
  • 二进制:  1,二进制是以0和1为码,逢2进1,比如3=11=1*2+1。  2,在计算机当中其它进制的算法基本基于2进制,因为计算机只认识0和1,比如16进制数则意味着一位16进制码由4位2进制码数表示。  3,在Java...

     

    二进制:

          1,二进制是以0和1为码,逢2进1,比如3=11=1*2+1。

          2,在计算机当中其它进制的算法基本基于2进制,因为计算机只认识0和1,比如16进制数则意味着一位16进制码由4位2进制码数表示。

          3,在Java语言中byte代表最小计量单位,byte由8位2进制数组成。

     

    Java基本数据类型与表示范围(boolean忽略)

          1,byte(整型):8位,short(整型):16位,char(字符型):16位,int(整型):32位,float(浮点型单精度):32位,long(整型):64位,double(浮点型双精度):64位。

          2,直接按位做比例运算,一个short数字或char字符可有两个byte数字表示,一个float或int数字可由4个byte数字表示,一个long或double数字可由8个byte数字表示。

          3,以2进制数表示范围计算得到各整型数值表示范围,每种数值类型的最大表示范围可以通过包装类的静态属性取到,比如Integer.MAX_VALUE。

          4,char类型是最具话题性的数据类型,它承担着整个语言世界的符号统统转换称为计算机所认识的编码格式的重任,关于字符集和编码包含了很多概念也带来了很多问题。

     

    二进制与编码

          一般对英文字符而言,一个字节表示一个字符,但是对汉字而言,由于低位的编码已经被使用(早期计算机并不支持中文,因此为了扩展支持,唯一的办法就是采用更多的字节数)只好向高位扩展。

          一般字符集编码的范围 utf-8>gbk>iso-8859-1(latin1)>ascllascll编码是美国标准信息交换码的英文缩写,包含了常用的字符,如阿拉伯数字,英文字母和一些打印符号,请注意字符和数字的区别,比如'0'字符对应的十进制数字是48。

          unicode编码包含很多种格式,utf-8是其中最常用的一种,utf-8名称的来自于该编码使用8位一个字节表示一个字符。对于一个汉字而言,它需要3个字节表示一个汉字,但大中华地区人民表示不服,搞一套gbk编码格式,用两个字节表示一个汉字。

     

    乱码问题:

          乱码问题的根源在于信息解码和编码时使用的格式不统一。

     

    示例1--简单&运算示例

    复制代码
        @Test
        public void demo(){
            // 0100&0100=0100
            assertEquals(4,4&4);
            // 1000&0100=0000
            assertEquals(0,4&8);
            
            // 字符'0'用十进制数48表示
            char c = '0';
            int i = c;
            assertEquals(48,i);
            
            // 认识 0xf, 0xff, 0xffff. f对应16进制数字15, 二进制1111
            byte b = Byte.MAX_VALUE;
            assertEquals(127,b);
            assertEquals(127,b & 0xff);
            assertEquals(15,b & 0xf);
            
            byte b1 =  -1;
            // 说明-1是按照默认的(byte)b1=0xff与0xff计算后转换为int值 = 255
            assertEquals(255, (byte)b1&0xff);
            assertEquals(255, b1&0xff);
            // 255转换为byte 结果为-1
            assertEquals(-1, (byte)(b1&0xff));
            // b1不强制转换编译器会报错. 0xff超过byte表示范围转为byte值得到-1
            byte bf = (byte) 0xff;
            assertEquals(bf, -1);
            // 0xf2 = 11110010
            // 符号位不变取反+1 = 10001101+00000001 = 10001110 = -14
            assertEquals(-14, (byte)0xf2);
        }
    复制代码

         上面的代码包含了几个基本的运算和转换的示例。

     

    二进制与其它类型直接的转换

         工具类ByteUtils.java(为方便了解进制转换,各个方法参数都不包含index,如果要作为工具使用,请自行修改)

    复制代码
    package org.wit.ff.common;
    
    /**
     * 
     * <pre>
     * 基本数据类型转换(主要是byte和其它类型之间的互转).
     * </pre>
     *
     * @author F.Fang
     * @version $Id: ByteUtils.java, v 0.1 2014年11月9日 下午11:23:21 F.Fang Exp $
     */
    public class ByteUtils {
        
        /**
         * 
         * <pre>
         * 将4个byte数字组成的数组合并为一个float数.
         * </pre>
         * 
         * @param arr
         * @return
         */
        public static float byte4ToFloat(byte[] arr) {
            if (arr == null || arr.length != 4) {
                throw new IllegalArgumentException("byte数组必须不为空,并且是4位!");
            }
            int i = byte4ToInt(arr);
            return Float.intBitsToFloat(i);
        }
    
        /**
         * 
         * <pre>
         * 将一个float数字转换为4个byte数字组成的数组.
         * </pre>
         * 
         * @param f
         * @return
         */
        public static byte[] floatToByte4(float f) {
            int i = Float.floatToIntBits(f);
            return intToByte4(i);
        }
    
        /**
         * 
         * <pre>
         * 将八个byte数字组成的数组转换为一个double数字.
         * </pre>
         * 
         * @param arr
         * @return
         */
        public static double byte8ToDouble(byte[] arr) {
            if (arr == null || arr.length != 8) {
                throw new IllegalArgumentException("byte数组必须不为空,并且是8位!");
            }
            long l = byte8ToLong(arr);
            return Double.longBitsToDouble(l);
        }
    
        /**
         * 
         * <pre>
         * 将一个double数字转换为8个byte数字组成的数组.
         * </pre>
         * 
         * @param i
         * @return
         */
        public static byte[] doubleToByte8(double i) {
            long j = Double.doubleToLongBits(i);
            return longToByte8(j);
        }
    
        /**
         * 
         * <pre>
         * 将一个char字符转换为两个byte数字转换为的数组.
         * </pre>
         * 
         * @param c
         * @return
         */
        public static byte[] charToByte2(char c) {
            byte[] arr = new byte[2];
            arr[0] = (byte) (c >> 8);
            arr[1] = (byte) (c & 0xff);
            return arr;
        }
    
        /**
         * 
         * <pre>
         * 将2个byte数字组成的数组转换为一个char字符.
         * </pre>
         * 
         * @param arr
         * @return
         */
        public static char byte2ToChar(byte[] arr) {
            if (arr == null || arr.length != 2) {
                throw new IllegalArgumentException("byte数组必须不为空,并且是2位!");
            }
            return (char) (((char) (arr[0] << 8)) | ((char) arr[1]));
        }
    
        /**
         * 
         * <pre>
         * 将一个16位的short转换为长度为2的8位byte数组.
         * </pre>
         * 
         * @param s
         * @return
         */
        public static byte[] shortToByte2(Short s) {
            byte[] arr = new byte[2];
            arr[0] = (byte) (s >> 8);
            arr[1] = (byte) (s & 0xff);
            return arr;
        }
    
        /**
         * 
         * <pre>
         * 长度为2的8位byte数组转换为一个16位short数字.
         * </pre>
         * 
         * @param arr
         * @return
         */
        public static short byte2ToShort(byte[] arr) {
            if (arr != null && arr.length != 2) {
                throw new IllegalArgumentException("byte数组必须不为空,并且是2位!");
            }
            return (short) (((short) arr[0] << 8) | ((short) arr[1] & 0xff));
        }
    
        /**
         * 
         * <pre>
         * 将short转换为长度为16的byte数组.
         * 实际上每个8位byte只存储了一个0或1的数字
         * 比较浪费.
         * </pre>
         * 
         * @param s
         * @return
         */
        public static byte[] shortToByte16(short s) {
            byte[] arr = new byte[16];
            for (int i = 15; i >= 0; i--) {
                arr[i] = (byte) (s & 1);
                s >>= 1;
            }
            return arr;
        }
    
        public static short byte16ToShort(byte[] arr) {
            if (arr == null || arr.length != 16) {
                throw new IllegalArgumentException("byte数组必须不为空,并且长度为16!");
            }
            short sum = 0;
            for (int i = 0; i < 16; ++i) {
                sum |= (arr[i] << (15 - i));
            }
            return sum;
        }
    
        /**
         * 
         * <pre>
         * 将32位int转换为由四个8位byte数字.
         * </pre>
         * 
         * @param sum
         * @return
         */
        public static byte[] intToByte4(int sum) {
            byte[] arr = new byte[4];
            arr[0] = (byte) (sum >> 24);
            arr[1] = (byte) (sum >> 16);
            arr[2] = (byte) (sum >> 8);
            arr[3] = (byte) (sum & 0xff);
            return arr;
        }
    
        /**
         * <pre>
         * 将长度为4的8位byte数组转换为32位int.
         * </pre>
         * 
         * @param arr
         * @return
         */
        public static int byte4ToInt(byte[] arr) {
            if (arr == null || arr.length != 4) {
                throw new IllegalArgumentException("byte数组必须不为空,并且是4位!");
            }
            return (int) (((arr[0] & 0xff) << 24) | ((arr[1] & 0xff) << 16) | ((arr[2] & 0xff) << 8) | ((arr[3] & 0xff)));
        }
    
        /**
         * 
         * <pre>
         * 将长度为8的8位byte数组转换为64位long.
         * </pre>
         * 
         * 0xff对应16进制,f代表1111,0xff刚好是8位 byte[]
         * arr,byte[i]&0xff刚好满足一位byte计算,不会导致数据丢失. 如果是int计算. int[] arr,arr[i]&0xffff
         * 
         * @param arr
         * @return
         */
        public static long byte8ToLong(byte[] arr) {
            if (arr == null || arr.length != 8) {
                throw new IllegalArgumentException("byte数组必须不为空,并且是8位!");
            }
            return (long) (((long) (arr[0] & 0xff) << 56) | ((long) (arr[1] & 0xff) << 48) | ((long) (arr[2] & 0xff) << 40)
                            | ((long) (arr[3] & 0xff) << 32) | ((long) (arr[4] & 0xff) << 24)
                            | ((long) (arr[5] & 0xff) << 16) | ((long) (arr[6] & 0xff) << 8) | ((long) (arr[7] & 0xff)));
        }
    
        /**
         * 将一个long数字转换为8个byte数组组成的数组.
         */
        public static byte[] longToByte8(long sum) {
            byte[] arr = new byte[8];
            arr[0] = (byte) (sum >> 56);
            arr[1] = (byte) (sum >> 48);
            arr[2] = (byte) (sum >> 40);
            arr[3] = (byte) (sum >> 32);
            arr[4] = (byte) (sum >> 24);
            arr[5] = (byte) (sum >> 16);
            arr[6] = (byte) (sum >> 8);
            arr[7] = (byte) (sum & 0xff);
            return arr;
        }
    
        /**
         * 
         * <pre>
         * 将int转换为32位byte.
         * 实际上每个8位byte只存储了一个0或1的数字
         * 比较浪费.
         * </pre>
         * 
         * @param num
         * @return
         */
        public static byte[] intToByte32(int num) {
            byte[] arr = new byte[32];
            for (int i = 31; i >= 0; i--) {
                // &1 也可以改为num&0x01,表示取最地位数字.
                arr[i] = (byte) (num & 1);
                // 右移一位.
                num >>= 1;
            }
            return arr;
        }
    
        /**
         * 
         * <pre>
         * 将长度为32的byte数组转换为一个int类型值.
         * 每一个8位byte都只存储了0或1的数字.
         * </pre>
         * 
         * @param arr
         * @return
         */
        public static int byte32ToInt(byte[] arr) {
            if (arr == null || arr.length != 32) {
                throw new IllegalArgumentException("byte数组必须不为空,并且长度是32!");
            }
            int sum = 0;
            for (int i = 0; i < 32; ++i) {
                sum |= (arr[i] << (31 - i));
            }
            return sum;
        }
    
        /**
         * 
         * <pre>
         * 将长度为64的byte数组转换为一个long类型值.
         * 每一个8位byte都只存储了0或1的数字.
         * </pre>
         * 
         * @param arr
         * @return
         */
        public static long byte64ToLong(byte[] arr) {
            if (arr == null || arr.length != 64) {
                throw new IllegalArgumentException("byte数组必须不为空,并且长度是64!");
            }
            long sum = 0L;
            for (int i = 0; i < 64; ++i) {
                sum |= ((long) arr[i] << (63 - i));
            }
            return sum;
        }
    
        /**
         * 
         * <pre>
         * 将一个long值转换为长度为64的8位byte数组.
         * 每一个8位byte都只存储了0或1的数字.
         * </pre>
         * 
         * @param sum
         * @return
         */
        public static byte[] longToByte64(long sum) {
            byte[] arr = new byte[64];
            for (int i = 63; i >= 0; i--) {
                arr[i] = (byte) (sum & 1);
                sum >>= 1;
            }
            return arr;
        }
    
    
    }
    复制代码

     

    测试用例:

        1,测试基本的移位操作符号.

    复制代码
        @Test
        public void op(){
            // >>>
            // >>
            // <<<
            int i = -1;
            System.out.println(Arrays.toString(ByteUtils.intToByte32(i)));
            
            // 有符号右移,符号位依然存在,右移一位后最左边的最高位补1, -1
            System.out.println(i >> 1);
            
            // 无符号右移,忽略符号位,右移一位后最左边的最高位补0,2147483647 Integer.MAX_VALUE
            System.out.println(i >>> 1);
            
            // 有符号左移,符号位依然存在,左移一位最低位补0. -2
            System.out.println(i << 1);
            // <<<无此符号,因为左移符号位不会丢失,没有必要再增加此操作.
        }
    复制代码

         2,查询最大值最小值.

    复制代码
        @Test
        public void showMaxValAndminVal() {
            // 127
            System.out.println(Byte.MAX_VALUE);
            // -128
            System.out.println(Byte.MIN_VALUE);
    
            // 32767
            System.out.println(Short.MAX_VALUE);
            // -32768
            System.out.println(Short.MIN_VALUE);
    
            // 65535 2的16次方-1
            System.out.println((int) Character.MAX_VALUE);
            // 0
            System.out.println((int) Character.MIN_VALUE);
    
            // 2147483647
            System.out.println(Integer.MAX_VALUE);
            // -2147483648
            System.out.println(Integer.MIN_VALUE);
    
            // 科学计数法.
            // 3.4028235E38
            System.out.println(Float.MAX_VALUE);
            // 1.4E-45
            System.out.println(Float.MIN_VALUE);
    
            // 9223372036854775807
            System.out.println(Long.MAX_VALUE);
            // -9223372036854775808
            System.out.println(Long.MIN_VALUE);
    
            // 科学计数法.
            // 1.7976931348623157E308
            System.out.println(Double.MAX_VALUE);
            // 4.9E-324
            System.out.println(Double.MIN_VALUE);
        }
    复制代码

          3,转换测试:

    复制代码
        @Test
        public void transByte() {
            char c = 'z';
            byte[] charToByte2Arr = ByteUtils.charToByte2(c);
            assertEquals("[0, 122]", Arrays.toString(charToByte2Arr));
            assertEquals('z', ByteUtils.byte2ToChar(charToByte2Arr));
    
            short s = Short.MAX_VALUE;
            // System.out.println("Short.MAX_VALUE:" + s);
            byte[] shortToByte2Arr = ByteUtils.shortToByte2(s);
            assertEquals("[127, -1]", Arrays.toString(shortToByte2Arr));
            assertEquals(s, ByteUtils.byte2ToShort(shortToByte2Arr));
    
            byte[] shortToByte16 = ByteUtils.shortToByte16(s);
            System.out.println(Arrays.toString(shortToByte16));
            System.out.println(ByteUtils.byte16ToShort(shortToByte16));
    
            int i = Integer.MAX_VALUE;
            // System.out.println("Integer.MAX_VALUE:" + i);
            byte[] intToByte4Arr = ByteUtils.intToByte4(i);
            assertEquals("[127, -1, -1, -1]", Arrays.toString(intToByte4Arr));
            assertEquals(i, ByteUtils.byte4ToInt(intToByte4Arr));
    
            byte[] intToByte32Arr = ByteUtils.intToByte32(i);
            System.out.println(Arrays.toString(intToByte32Arr));
            System.out.println(ByteUtils.byte32ToInt(intToByte32Arr));
    
            long j = Long.MAX_VALUE;
            // System.out.println("Long.MAX_VALUE:" + j);
            byte[] longToByte8Arr = ByteUtils.longToByte8(j);
            assertEquals("[127, -1, -1, -1, -1, -1, -1, -1]", Arrays.toString(longToByte8Arr));
            assertEquals(j, ByteUtils.byte8ToLong(longToByte8Arr));
    
            byte[] longToByte64Arr = ByteUtils.longToByte64(j);
            System.out.println(Arrays.toString(longToByte64Arr));
            System.out.println(ByteUtils.byte64ToLong(longToByte64Arr));
    
            double d = 2.34;
            byte[] doubleToByte8Arr = ByteUtils.doubleToByte8(d);
            assertEquals("[64, 2, -72, 81, -21, -123, 30, -72]", Arrays.toString(doubleToByte8Arr));
            // double类型不能直接做等值比较,只能在精度范围做差值比较.
            assertEquals(d + "", ByteUtils.byte8ToDouble(doubleToByte8Arr) + "");
    
            float f = 1.2f;
            byte[] floatToByte4Arr = ByteUtils.floatToByte4(f);
            assertEquals("[63, -103, -103, -102]", Arrays.toString(floatToByte4Arr));
            assertEquals(f + "", ByteUtils.byte4ToFloat(floatToByte4Arr) + "");
        }
    展开全文
  • 注册表字符串值转换二进制工具

    热门讨论 2011-11-27 01:46:29
    这款工具不支持中文字转换.其优点是可以把转换过来的值直接复制.免去了我们到注册表里面转换来一个一个的对比的麻烦.推荐做注册表合并工具的人使用...
  • verilog快速将二进制转成BCD码

    千次阅读 2019-01-02 12:02:39
    verilog快速将二进制转成BCD码 FPGA的到的数值最后在数码管、LED、LCD显示,最直接的方式是利用求商/求余,但是这种方式非常占用内部资源的,这时候很多时候都会采用将二进制数转换成BCD码,最后再显示。转换成BCD码...
  • #include#includevoid change2(int num){if (num != 0){change2(num / 2);printf("%d", num % 2);//printf函数在change2函数后,为逆序...printf("请输入要转换的十进制数: ");scanf("%d", &num);printf("转换...
  • 进制转换计算器特色:1、如果要将二进制转换为十进制,请单击"二进制"单选按钮,在编辑框中输入二进制,然后单击"十进制"单选按钮,转换结果将显示在编辑框中。转移信息显示在状态栏的右侧。2、单击"编号分组"复选框...
  • mysql 二进制转换工具

    2010-06-13 23:36:42
    转换为二进制。然后传过去。建立函数提权。。。
  • 前言:用于处理Java基本数据的转换及进制转换操作工具 一、实现功能 1、int与byte互 2、int与byte[]互 3、short与byte互 4、short与byte[]互 5、16位short与byte[]互 6、long与byte[]互 7、byte[]与...
  •  本文主要介绍java基础类型的二进制转换和二进制的基本概念。 二进制:  1,二进制是以0和1为码,逢2进1,比如3=11=1*2+1。  2,在计算机当中其它进制的算法基本基于2进制,因为计算机只认识0和1,比如16进制...
  • 成功导出变化了的dump文件。然后我们用hexeditor(这个会自动变成正常阅读顺序,当然某些...命令行形式的 工具,可以拷贝打印出的文字,用于分析 或者 写文档 https://www.di-mgt.com.au/hexdump-for-windows.ht...
  • 二进制与计算机事物的多少或者顺序,我们可以用一种称为“数”的符号来表示。事物的数量是无穷的,我们却不可能创造无数个符号。为了解决这个难题,人们创造了进位制(又叫做位值制),这样就可以用几个有限的符号,来...
  • 计算机中的文件是以二进制编码进行表示的,推荐几个不错的查看一个二进制工具。 Binary Viewer Ultra-Edit Notepad++
  • 二进制:0,1(逢二进一) 八进制:0-7(逢八进一) 十进制:0-9(逢十进一) 十六进制:0-9,a,b,c,d,e,f(逢十六进一) 进制间的相互转换 1. 十进制->二进制 10(十)->10(二)(倒除法,余数逆序...
  • 文本文件和二进制文件转换

    万次阅读 2012-10-08 23:38:45
    网上关于文本文件与二进制文件的文章很多,但遗憾的是,这些文章讲得都比较散。下面我将结合所查到的资料,从多个角度谈谈文本文件与二进制文件。  一、文本文件与二进制文件的定义 大家都知道计算机的存储在...
  •  大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。  简单来说,文本文件是基于字符编码的文件,常见的编码有
  • 大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNIC...
  • 简洁明了,功能齐全的绿色编辑软件,可更改行列选择,更改字符类型各种操作
  • 原标题:说说二进制与计算机的那些事儿二进制与计算机事物的多少或者顺序,我们可以用一种称为“数”的符号来表示。事物的数量是无穷的,我们却不可能创造无数个符号。为了解决这个难题,人们创造了进位制(又叫做位...
  • 文本文件和二进制文件详解(

    千次阅读 2017-05-26 22:19:38
    自:...2)二进制文件:这类文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们,只有通过相应的软件才能将其显示出来。二进制文件一般是可执行程序、图形、图像

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 68,720
精华内容 27,488
关键字:

二进制转文字工具