`

java中的网络字节序

 
阅读更多
常用的字节序
Little endian:将低序字节存储在起始地址。例如一个4字节的值为0x1234567的整数与高低字节对应关系:
01 23 45 67
Byte3 Byte2 Byte1 Byte0
将在内存中按照如下顺序排放:
内存地址序号 字节在内存中的地址 16进制值
0x03 Byte3 01
0x02 Byte2 23
0x01 Byte1 45
0x00 Byte0 67
Big endian:将高序字节存储在起始地址。例如一个4字节的值为0x1234567的整数与高低字节对应关系:
01 23 45 67
Byte3 Byte2 Byte1 Byte0
将在内存中按照如下顺序排放:
内存地址序号 字节在内存中的地址 16进制值
0x03 Byte0 67
0x02 Byte1 45
0x01 Byte2 23
0x00 Byte3 01

网络字节序
网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式。
如果通信的一方是JAVA程序,一方是C/C++程序时,则需要在C/C++一侧使用以上几个方法进行字节序的转换,而JAVA一侧,则不需要做任何处理,因为JAVA字节序与网络字节序都是BIG-ENDIAN,只要C/C++一侧能正确进行转换即可(发送前从主机序到网络序,接收时反变换)。如果通信的双方都是JAVA,则根本不用考虑字节序的问题了。
分享到:
评论
1 楼 zhoujieyaoqu 2017-06-20  
windows内核都是低位在前的

相关推荐

    JAVA网络字节序转换1

    Java 网络字节序转换是编程过程中一个重要的概念,尤其在跨平台通信和处理二进制数据时。字节序是指多字节数据(如整数或浮点数)在内存或文件中存储的顺序。主要有两种字节序:Big-Endian(大端字节序)和 Little-...

    java-16进制4字节转Float

    Java中的默认字节序是网络字节序,也就是大端字节序。 2. **解析过程**:将16进制字符串转换为浮点数,通常涉及以下步骤: - 将16进制字符串转换为字节数组,每个字节对应一个16进制字符。 - 根据字节序调整字节...

    c++,java,php,c# 的网络字节流读写文件

    Java默认使用网络字节序,即大端模式。对于字节序转换,Java提供了`java.nio.ByteOrder`类,可以方便地在大端和小端之间切换。 PHP是另一种常用的Web开发语言,其文件操作主要通过`fopen`、`fwrite`和`fread`等函数...

    JAVA作业三字节数组转化.docx

    在Java编程语言中,字节数组(byte array)和基本数据类型如int之间的转换是常见的操作,特别是在处理网络通信、文件存储或者序列化时。本篇内容将详细讲解如何在Java中进行这两种类型的转化。 首先,我们来看如何...

    ByteIO_java_字节流_

    Java的`DataInputStream`和`DataOutputStream`类提供了处理基本数据类型(如int、float)的方法,并且在写入时会自动处理字节序(大端或小端)。而`ObjectInputStream`和`ObjectOutputStream`则用于序列化和反序列化...

    Java整型数与网络字节序byte[]数组转换关系详解

    Java中的整型数包括int、long、short等类型,而网络字节序是指在网络传输中的字节顺序。由于Java和C/C++之间的数据类型长度不一致,因此需要进行相应的转换。 在Java中,将整型数转换为byte[]数组可以使用位操作符...

    JAVA转byte[]为int,long,double

    例如,在大端序中,最高位的字节在数组的最前面,而在小端序中,最高位的字节在数组的最后面。 在实际应用中,这些转换可能会涉及到更多的边界检查和错误处理,例如检查输入数组的长度是否符合要求,以及处理可能的...

    Java和c++的Socket通信如何发送结构体

    可以使用`htonl`, `htons`等函数将整型数据转换为网络字节序,或者使用`htonf`进行浮点数的转换。在Java中,没有内置的字节序转换函数,但可以通过手动操作字节数组来完成转换。 描述中提到的"报文格式:结构体报头...

    Java与其他语言数据类型之间的转换方法

    在提供的代码段中,我们可以看到几个关键的方法,用于在Java中进行字节序转换: 1. `toLH(int n)` 和 `toHH(int n)`:这两个方法分别用于将整型(int)数据转换为小端字节序(低字节在前)和大端字节序(高字节在前...

    netty-java开发的网络通信服务

    在网络通信中,由于不同平台可能采用不同的字节序,所以需要进行字节序转换以确保数据的正确传输。Netty在处理网络数据时,会考虑到这一点,它提供了ByteOrder工具类和相关的ByteBuf接口,使得开发者可以方便地处理...

    java实现十六进制字符unicode与中英文转换示例

    首先,它将输入的十六进制字符串转换为字节数组,然后使用这些字节尝试以UTF-8、UTF-16(与Unicode相同)、UTF-16LE(小端字节序)、UTF-16BE(大端字节序)、UTF-32以及各自的LE和BE版本进行解码。`str2all`方法则...

    Java与c语言 DES加密互通

    总结,Java与C语言之间的DES加密互通需要理解DES算法的原理,熟悉Java和C语言中对应的加密库,处理好密钥、IV、填充方式以及字节序等问题。通过精心设计和测试,可以实现两者的无缝加密解密交互。

    java和C++通信结构体发送

    在传输前,需要将结构体数据转换为网络字节序,Java的`java.nio.ByteOrder`和C++的`htonl`, `ntohl`等函数可用来处理字节序问题。 5. **跨语言通信的库和框架**: - **JNI(Java Native Interface)**:Java提供...

    Java超全的基础面试题

    - **Java的字节序**:Java采用大端字节序,意味着在多字节数据中,高位字节存储在低地址处。 4. **JDK与JRE的区别**: - **JDK**:Java开发工具包,包含了Java编译器、调试器、文档生成工具等,用于开发和运行...

    字节流编码获取

    例如,UTF-16LE表示小端字节序,而UTF-16BE表示大端字节序。在处理这些编码的字节流时,正确识别BOM至关重要。 在实际编程中,处理字节流编码的关键步骤包括: 1. 打开一个输入流(如FileInputStream)。 2. 如果...

    Java 解析 Linux C结构体

    注意Java的字节序通常是小端,而C编译器可能会根据目标架构选择大端或小端。如果两端字节序不同,还需要进行字节序转换。 4. **处理字符串**:C语言的字符串是零终止的,所以在Java中读取时需要找到第一个零值来...

    ARP.rar_ARP java_java arp

    2. **网络字节序**:由于网络数据交换遵循大端字节序(Big-Endian),代码中可能包含了处理字节序的函数,确保数据在网络中的正确传输。 3. **ARP协议操作**:ARP请求和响应的生成,包括如何构建正确的包头和填充...

    嵌入式网络编程PPT教案.pptx

    在网络上传输数据时,使用网络字节序(大端序),而在不同的主机系统中,字节序可能不同,因此在网络通信中需要进行字节序的转换。 网络编程模型的讨论包括如何建立连接、发送和接收数据,以及处理并发连接等。这些...

    16进制单精度(32位)浮点型转换器源码

    本主题聚焦于一个特定的工具或源码,即“16进制单精度(32位)浮点型转换器”,它能够将32位的浮点数在16进制表示与十进制表示之间进行转换,并考虑到了不同的字节序——大端和小端。 首先,我们要理解16进制和...

    java全栈工程师-java io

    Java默认采用Big Endian字节序。 ### 二进制与文本编码 - **二进制编码**:直接以字节形式传输数据,适用于数值型数据的传输,节省空间,速度快。 - **文本编码**:以字符形式传输数据,适用于人类可读性较高的...

Global site tag (gtag.js) - Google Analytics