Java 中的小端和大端 (android)

Sec*_*ech 4 java android tcp type-conversion endianness

我正在使用 Android Studio 构建一个应用程序,在我的项目中,我需要进行大量转换,例如短/整型到字节数组。我还希望我的应用程序从用 C 编码的机器人接收数据,并且机器人发送一个包含大量 uint16-32、int16-32...的结构。我发现了很多对我有帮助的帖子和代码将我的属性转换为字节数组,但我总是看到人们谈论小端和大端,但我无法理解其中的区别。如果有人可以向我解释一下......注意:机器人通过 TCP 协议的 Wifi 套接字发送数据

小智 5

Little Endian 和 Big Endian 只是指数据结构字节的呈现顺序。

想象一下,您有一个由十六进制值 0xabcd 表示的 16 位整数。因为 8 位 = 1 个字节,所以我们的整数由两个字节 ab 和 cd 组成。在 Big Endian 系统中,最高有效字节放置在较低的内存地址中,而在 Little Endian 系统中,我们将它们放置在较高的内存地址中。

为了直观地显示这一点,假设我们将整数放在内存地址 0 处。

在 Big Endian 系统中,我们的内存将如下所示:

Memory address  -> |  0 |  1 |
Value           -> | ab | cd |
Run Code Online (Sandbox Code Playgroud)

在 Little Endian 系统中,它看起来像这样:

Memory address  -> |  0 |  1 |
Value           -> | cd | ab |
Run Code Online (Sandbox Code Playgroud)

传统上,网络字节顺序是 Big Endian。

  • Android(本机)是 Little-Endian。 (2认同)