前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >音频字节序

音频字节序

原创
作者头像
ruochen
发布2021-12-15 14:42:43
9060
发布2021-12-15 14:42:43
举报
文章被收录于专栏:若尘的技术专栏

1 字节序

字节顺序是指占用内存多于一个字节类型的数据在内存中的存放顺序,有小端、大端两种顺序。

  • BIG-ENDIAN:大端,将高字节数据存放在低地址处,低字节数据存放在高地址处。
  • LITTLE-ENDIAN:小端,将低字节数据存放在内存低地址处,高字节数据存放在内存高地址处。

注意:字节序是面向多字节类型定义的,比如2字节、4字节、8字节整型、长整型、浮点型等,单字节的字符串一般不用考虑。

1.1 示例

16进制数据0x1234的二进制表示为:0001 0010 0011 0100,占用2个字节,分别为十六进制的12和34。以该数据分别以大端和小端格式存储。

1.1.1 LITTLE-ENDIAN

在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:

内存地址

0x4000

0x4001

存放内容

0x34

0x12

1.1.2 BIG-ENDIAN

而在Big-endian模式CPU内存中的存放方式则为:

内存地址

0x4000

0x4001

存放内容

0x12

0x34

如果以不同的方式读取,则会发生错误。

2 主机字节序

至于计算机到底是BIG-ENDIAN、LITTLE-ENDIAN、跟CPU有关的,一种CPU不是BIG-ENDIAN就是LITTLE-

ENDIAN。IA架构(Intel、AMD)的CPU中是Little-Endian,而PowerPC 、MIPS UNIX、HP-PA

UNIX、SPARC和Motorola处理器是Big-Endian。

3 网络字节序

网络字节序是指数据在网络上传输时是大端还是小端的,在Internet的TCP/IP协议规定了一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用

大端 字节序。

4 Java字节序

JAVA字节序指的是在JAVA虚拟机中多字节类型数据的存放顺序,JAVA字节序也是 大端 字节序。

那么Jvm是怎么判断你的计算机是大端存储、还是小端存储呢?JDK为我们提供一个类ByteOrder,通过以下代码就可以知道机器的字节序

代码语言:txt
复制
System.out.println(ByteOrder.nativeOrder());

在java.nio包下提供了ByteOrder、ByteBuffer等于字节序相关的类,我们也可以改变JVM中默认的字节序。

代码语言:txt
复制
public class JVMEndianTest {
代码语言:txt
复制
    public static void main(String[] args) {
代码语言:txt
复制
        int x = 0x01020304;
代码语言:txt
复制
        ByteBuffer bb = ByteBuffer.wrap(new byte[4]);
代码语言:txt
复制
        bb.asIntBuffer().put(x);
代码语言:txt
复制
        String ss_before = Arrays.toString(bb.array());
代码语言:txt
复制
        System.out.println("默认字节序 " +  bb.order().toString() +  ","  +  " 内存数据 " +  ss_before);
代码语言:txt
复制
        bb.order(ByteOrder.LITTLE_ENDIAN);
代码语言:txt
复制
        bb.asIntBuffer().put(x);
代码语言:txt
复制
        String ss_after = Arrays.toString(bb.array());
代码语言:txt
复制
        System.out.println("修改字节序 " + bb.order().toString() +  ","  +  " 内存数据 " +  ss_after);
代码语言:txt
复制
    }

5 Wav文件

Wav文件则是 小端 字节序。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 字节序
    • 1.1 示例
      • 1.1.1 LITTLE-ENDIAN
      • 1.1.2 BIG-ENDIAN
  • 2 主机字节序
  • 3 网络字节序
  • 4 Java字节序
  • 5 Wav文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档