java 大端字节序_理解字节序

java 大端字节序_理解字节序1 什么是字节序字节序 顾名思义就是字节的顺序 更具体的讲 它是多字节数据存储和传输时 字节的顺序 2 为什么有 字节序 这个东西 因为物理内存是以字节为单位进行数据存储 也就是我们常说的计算机基本单位为字节 因此 单字节的数据 如 c 或 java 的 char 类型的数据 没有字节序这一说 因为获取它只需要读取一个字节 而多字节数据 由于有多个字节 所以在存储和传输可以使用不同的顺序进行操作 3 举个例子

1、什么是字节序

字节序,顾名思义就是字节的顺序。更具体的讲,它是多字节数据存储和传输时,字节的顺序。

2、为什么有“字节序”这个东西?

因为物理内存是以字节为单位进行数据存储,也就是我们常说的计算机基本单位为字节。

因此,单字节的数据(如c或java的char类型的数据)没有字节序这一说,因为获取它只需要读取一个字节。而多字节数据,由于有多个字节,所以在存储和传输可以使用不同的顺序进行操作。

3、举个例子

十六进制数 0x 共占4个字节,分别是0x12、0x34、0x56、0x78,因此在该数字中0x12属于高位数据,0x78属于地位数据。

注:

可以把内存看成是一个很大的数组,4G内存则是一个长度为的数组。

该数组的索引其实就是内存地址,左边是比较小的地址,右边则越来越大,直至最大值。

第一种顺序:低地址存放高位数据,叫大端模式

a34ce9f1425d43a04ca7c97b81e9c6e8.png

第二种顺序:低地址存放低位数据,叫小端模式

d975d77132f28c575f86e86815d3dd3b.png

两者,大端模式比较符合人类的阅读习惯;小端模式更符合计算机的处理方式,因为计算机从低位开始处理。

4、大小端的应用场景。

网络序:也称为网络字节序,都是大端模式。因为TCP/IP协议对各层协议统一规定采用大端模式。

主机序:机器的字节序,有大端模式也有小端模式,根据具体机器的处理决定的,小端模式较常见。

那么,在进行网络通讯时,在将本地数据发送到网络上就需要注意这个顺序。如果本地机器的字节序是小端模式,则需要先转换成大端模式后再进行发送;如果本地已经是大端模式,则可以直接发送。

ps.在私有协议上的数据,只要收发两端约定好,用什么顺序都行。不过,还是建议用网络序发送。

5、如何判断主机序

int main() {

int x = 0x;

char* p = (char*)&x;

if(p[0]==1){

printf(“Big\n”);

}

else{

printf(“Little\n”);

}

return 0;

}

6、Java设置大小端

public class HelloEndian {

public static void main(String[] args) {

ByteBuffer b = ByteBuffer.wrap(new byte[4]);

b.order(ByteOrder.BIG_ENDIAN);

b.putInt(0x0);

System.out.println(“Big-Endian: ” + Arrays.toString(b.array()));

b = ByteBuffer.wrap(new byte[4]);

b.order(ByteOrder.LITTLE_ENDIAN);

b.putInt(0x0);

System.out.println(“Little-Endian: ” + Arrays.toString(b.array()));

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210221.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午8:03
下一篇 2026年3月19日 上午8:03


相关推荐

  • jsonobject是什么类型_json和jsonobject区别

    jsonobject是什么类型_json和jsonobject区别JSONObject是一种数据结构,可以理解为JSON格式的数据结构(key-value结构),可以使用put方法给json对象添加元素。JSONObject可以很方便的转换成字符串,也可以很方便的把其他对象转换成JSONObject对象。一、构建json1、实例化一个JSONObject对象,用put()方法将数据写入。JSONObjectobj=newJSONObject(…

    2025年12月1日
    7
  • python的enumerate函数怎么加判断条件_java中比int大的整数类型

    python的enumerate函数怎么加判断条件_java中比int大的整数类型Python的enumerate()函数就像是一个神秘的黑箱,你无法简单地用一句话来概括这个函数的作用与用法。enumerate()函数属于非常有用的高级用法,而对于这一点,很多初学者甚至中级学者都没有意识到。这个函数的基本应用就是用来遍历一个集合对象,它在遍历的同时还可以得到当前元素的索引位置。我们看一个例子:names=[“Alice”,”Bob”,”Carl”]forindex,valueinenumerate(names):print(f'{index}:{va

    2025年8月5日
    6
  • Android模拟器怎么配置网络连通

    Android模拟器怎么配置网络连通原文 http blog csdn net hongchangfir article details 作者 hongchangfir nbsp nbsp nbsp nbsp nbsp nbsp nbsp PC 机可以上网 PC 机上面的 android 模拟器不能上网 其实只要使模拟器跟自己的 PC 在同一个网段内就行了 nbsp nbsp nbsp nbsp nbsp 首先 如果没有配置 sdk 的环境变量的 那么在 CMD 命令

    2026年3月26日
    1
  • 常见的目标追踪算法

    常见的目标追踪算法

    2026年3月15日
    3
  • Platform SDK February 2003 For VC6.0(ISO打包版)

    Platform SDK February 2003 For VC6.0(ISO打包版)最近编程需要使用到PlatformSDKFebruary2003ForVC6.0内的文件,于是就下载使用。发现网络上面都是给的微软的官方下载地址,并没有打包下载的地址,于是就顺手打包了以下所有的文件,保存为iso格式,方便使用。这里制作了一个新的启动安装向导PlatformSDKFebruary2003.iso下载地址:348Mhttp://pan.baidu.com/s/

    2022年5月4日
    55
  • 为什么Qwen3系列模型中没有720亿参数规模的Qwen3-72B?Qwen3-72B还会发布吗?NO!

    为什么Qwen3系列模型中没有720亿参数规模的Qwen3-72B?Qwen3-72B还会发布吗?NO!

    2026年3月13日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号