`
123003473
  • 浏览: 1055347 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Java的二进制文件字节序转换

 
阅读更多
字节序指的是数据存储的顺序问题,分为Big-Endian和Little-Endian,Big-Endian指的是数据中的高位存储在存储器的低位,Little-Endian正好相反。Big-Endian也叫大头在前,Little-Endian叫做小头在前。
举例而言,有一个4字节的数据0x01020304,要存储在内存中或文件中编号0~3字节的位置,两种字节序的排列方式分别如下:
Big Endian
低地址                           高地址
----------------------------------------->
地址编号
|     0      |      1     |     2       |      3    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     01     |      02    |     03      |     04    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Little Endian

低地址                           高地址
----------------------------------------->
地址编号
|     0      |      1     |     2       |      3    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |     04     |      03    |     02      |     01    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

如果按照我们一般的书写习惯来说,Big-Endian似乎更好一点。
具体应用中是用big还是little就要取决于系统平台了。不同的CPU会有不同的情况,比如说x86架构的cpu使用的是little模式,而PowerPC则是big。C/C++语言对数据的处理取决于其运行的CPU,而Java则统一使用big模式。
如果单纯仅是使用Java的话也就不存在大小字节序的处理问题,但有时候Java程序可能还要使用到C/C++这类语言生成的数据,尤其是在我们常用x86环境下,两种语言的字节序就会出现不一致的问题,必须做一定的处理。
处理的方法很简单,就是把数据按字节前后调换一下就可以了。
在这里是将长度为len的数据转换成字节数组str[len],带入以下函数,如果原始数据是little,也就是big=false的情况下,函数将对数据进行高低位的调换,并返回。
publicstaticbyte[] ReversEndian(byte str[],int len, boolean big)
    {
       byte b;
       byte res[]=newbyte[len];
       for(int i=0;i<len;i++)
       {
           res[i]=str[i];          
       }
       if(big==false)
       {
           for(int i=0;i<len;i++)
           {
              b=str[i];
              res[len-i-1]=b;            
           }
       }     
       return res;
    }

假设现在我们需要从一个C/C++语言生成的二进制文件中读出一个float数据,可以如下处理。
//文件名
String fileName="file";
//float变量是4字节长
byte b[]=newbyte[4];
ByteBuffer bb;
File file=new File(fileName);
FileInputStream fis=new FileInputStream(file);
//从文件中读取一个4字节数据
fis.read(b);
//反转
b=ReversEndian(b,4,false);
//将字节数组还原成浮点数值
bb=ByteBuffer.wrap(b);
float value=bb.getFloat();
分享到:
评论

相关推荐

    java 将文件中二进制文件转换成文本文本文件并输出

    这个程序会读取名为"binary_file.bin"的二进制文件,将其中的每个字节转换为ASCII字符,并将结果写入"test_file.txt"文本文件。请注意,如果二进制文件包含非ASCII字符,转换可能会导致乱码或不可读的文本。 在实际...

    java二进制,字节数组,字符,十六进制,BCD编码转换

    /* java二进制,字节数组,字符,十六进制,BCD编码转换2007-06-07 00:17/** *//** * 把16进制字符串转换成字节数组 * @param hex * @return */

    java-16进制4字节转Float

    浮点数在计算机内部通常是用二进制的格式存储的,具体分为两部分:符号位、指数部分和尾数部分。在Java中,浮点数有两种主要形式:单精度浮点数(float)和双精度浮点数(double),它们分别使用32位和64位来存储。 ...

    JAVA二进制字节数组字符十六进制BCD编码转换.doc

    在Java编程中,二进制、字节数组、字符、十六进制和BCD(Binary-Coded Decimal,二进制编码的十进制)编码转换是常见的数据处理任务。以下将详细介绍这些概念以及如何在Java中进行相关操作。 1. **二进制与十六进制...

    java中进制转换(二进制,十进制,十六进制)及字节数组与十六进制的转换

    本篇将详细阐述如何在Java中进行二进制、十进制和十六进制之间的转换,以及字节数组与十六进制字符串的相互转换。 一、进制转换 1. **二进制转十进制**:Java中可以使用`Integer.parseInt()`或`Long.parseLong()`...

    Java实现的进制转换工具类完整示例

    Java实现的进制转换工具类是Java语言中的一种常用工具类,用于实现各种进制之间的转换操作,如二进制、十六进制、字符串、数组等。该工具类主要提供了将字节数组转换为十六进制字符数组或字符串的方法,以及将字符串...

    汉字十六进制和二进制转换

    通过上述分析可以看出,给定的Java代码示例有效地实现了汉字从二进制到十六进制的转换,以及从十六进制回到二进制的逆过程。这对于理解字符编码、数据表示和转换等概念非常有帮助。同时,这些方法也可以应用于更广泛...

    java读取二进制文件

    ### Java读取二进制文件知识点详解 #### 一、二进制文件基本概念 在计算机科学中,二进制文件是由一系列字节组成的文件,这些字节可以表示任何类型的数据,包括文本、图像、音频等。二进制文件与文本文件的主要区别...

    java基础,进制转换.pdf

    - 进制转换:通过乘以2的幂次方进行进制转换,例如将字节转换为千字节,需乘以2^10。 7. Java数据类型的取值范围 - byte的取值范围是-128到127,占用一个字节。 - short的取值范围更大,是两个字节的大小。 - ...

    java String 与各种进制字符之间的转换

    - `Integer.reverseBytes(int i)`和`Long.reverseBytes(long l)`可以用于交换字节顺序,这对于处理二进制数据,尤其是在不同字节序的系统间交换数据时很有用。 - `ByteBuffer`类提供了将字节数组与各种类型(包括...

    【博客 Java调用MATLAB,将文件转换为二进制流】java+matlab程序

    4. **处理二进制流**:MATLAB转换后的二进制数据在Java中表现为字节数组,可以进一步处理,比如写入到文件、在网络上传输或者存储到数据库中。Java的`java.io`和`java.nio`包提供了丰富的工具来处理二进制流。 5. *...

    二进制流转PDF

    JAVA二进制流转PDF 1 http接口接收到二进制流,如下,转换成Pdf文件保存到本地 %PDF-1.4 %���� 3 0 obj ...

    Java进制转换,十六进制、十进制、二进制

    正整数的十进制转换二进制 将一个十进制数除以二,得到的商再除以二,依此类推直到商等于一或零时为止,倒取除得的余数,即换算为二进制数的结果。只需记住要点:除二取余,倒序排列。 由于计算机内部表示数的字节...

    利用Java读取二进制文件实例详解

    在示例代码中,我们使用了little-endian字节顺序来读取二进制文件,并将其转换为CSV文件。 四、Java读取二进制文件的优点 使用Java读取二进制文件具有许多优点。首先,Java提供了多种方式来读取和处理二进制文件,...

    打开二进制的软件 java

    在描述中提到的“将文件转为01二进制查看”,我们可以使用Java的`Integer.toBinaryString(int)`方法将整数转换为二进制字符串,或者`BitSet`类来操作和显示位。如果你想查看文件的每一位,可以逐字节读取,然后转换...

    java进制转换工具类

    二进制数组转换为二进制字符串 将二进制数组转换为十六进制字符串 将十六进制转换为二进制字节数组 将十六进制转换为二进制字符串

    将图片转成二进制并生成Base64编码字符串,再将二进制转换成各种图片

    而Base64是一种用于将二进制数据转换为可打印ASCII字符的编码方法,它将每3个字节的二进制数据转换为4个Base64字符,这样可以在文本格式中安全地传输和存储非文本数据,如图片。 在Java编程语言中,我们可以使用...

    读取文件中的二进制文件 将输出到新的文件夹里

    在IT行业中,处理二进制文件是一项常见的...总的来说,Java提供了丰富的API来处理二进制文件,无论是读取、写入还是转换。在实际应用中,我们需要根据具体需求选择合适的工具和方法,确保数据的准确无误地传输和处理。

    webservice4 二进制文件读取

    在Web服务开发中,特别是基于Java的WebService,处理二进制文件(如图片、音频或视频文件)的传输是一个常见的需求。本文将详细讨论如何在WebService4中读取和传输二进制文件,以及涉及的相关技术。 首先,我们可以...

    二进制字节与字符串之间的转换

    你可以通过运行这个程序,观察输入图片文件和输出的字符串,理解二进制字节与字符串之间的转换过程。同时,也可以通过反向转换验证数据是否能准确还原,确保图片的质量和完整性不受影响。 总之,理解和掌握二进制...

Global site tag (gtag.js) - Google Analytics