- 浏览: 352179 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
mcseer:
我按照设置,但没有生效。能否协助
Asterisk中MixMonitor的参数b,接通后才录音 -
hbxfyxw:
过来看看文周书记,文周书记的总结很好很实用
(可行)easyui 实现 panel 拖动效果 -
hbxfyxw:
(惨痛教训) java runtime().exec() 提示 No such file or directory -
hwzyyx:
hbxfyxw 写道过来看看黄师傅,黄师傅行文走笔娓娓道来,受 ...
(原创)easyui 页面加载慢的原因及解决办法 -
hbxfyxw:
过来看看黄师傅,黄师傅行文走笔娓娓道来,受教了
(原创)easyui 页面加载慢的原因及解决办法
/**
* 通信格式转换
*
* Java和一些windows编程语言如c、c++、delphi所写的网络程序进行通讯时,需要进行相应的转换
* 高、低字节之间的转换
* windows的字节序为低字节开头
* linux,unix的字节序为高字节开头
* java则无论平台变化,都是高字节开头
*/
public class
FormatTransfer {
/**
* 将int转为低字节在前,高字节在后的byte数组
* @param n int
* @return byte[]
*/
public static byte[]
toLH(int
n) {
byte[] b = new byte[4];
b[0] = (byte) (n & 0xff);
b[1] = (byte) (n >> 8 & 0xff);
b[2] = (byte) (n >> 16 & 0xff);
b[3] = (byte) (n >> 24 & 0xff);
return b;
}
/**
* 将int转为高字节在前,低字节在后的byte数组
* @param n int
* @return byte[]
*/
public static byte[]
toHH(int n) {
byte[] b = new byte[4];
b[3] = (byte) (n & 0xff);
b[2] = (byte) (n >> 8 & 0xff);
b[1] = (byte) (n >> 16 & 0xff);
b[0] = (byte) (n >> 24 & 0xff);
return b;
}
/**
* 将short转为低字节在前,高字节在后的byte数组
* @param n short
* @return byte[]
*/
public static byte[]
toLH(short n) {
byte[] b = new byte[2];
b[0] = (byte) (n & 0xff);
b[1] = (byte) (n >> 8 & 0xff);
return b;
}
/**
* 将short转为高字节在前,低字节在后的byte数组
* @param n short
* @return byte[]
*/
public static byte[]
toHH(short n) {
byte[] b = new byte[2];
b[1] = (byte) (n & 0xff);
b[0] = (byte) (n >> 8 & 0xff);
return b;
}
/**
* 将将int转为高字节在前,低字节在后的byte数组
public static byte[]
toHH(int number) {
int temp = number;
byte[] b = new byte[4];
for (int i = b.length - 1; i > -1; i--) {
b = new Integer(temp & 0xff).byteValue();
temp = temp >> 8;
}
return b;
}
public static byte[]
IntToByteArray(int i) {
byte[] abyte0 = new byte[4];
abyte0[3] = (byte) (0xff & i);
abyte0[2] = (byte) ((0xff00 & i) >> 8);
abyte0[1] = (byte) ((0xff0000 & i) >> 16);
abyte0[0] = (byte) ((0xff000000 & i) >> 24);
return abyte0;
}
*/
/**
* 将float转为低字节在前,高字节在后的byte数组
*/
public static byte[]
toLH(float f) {
return toLH(Float.floatToRawIntBits(f));
}
/**
* 将float转为高字节在前,低字节在后的byte数组
*/
public static byte[]
toHH(float f) {
return toHH(Float.floatToRawIntBits(f));
}
/**
* 将String转为byte数组
*/
public static byte[]
stringToBytes(String s, int length) {
while (s.getBytes().length < length) {
s += " ";
}
return s.getBytes();
}
/**
* 将字节数组转换为String
* @param b byte[]
* @return String
*/
public static String
bytesToString(byte[] b) {
StringBuffer result = new StringBuffer("");
int length = b.length;
for (int i=0; i<length; i++) {
result.append((char)(b & 0xff));
}
return result.toString();
}
/**
* 将字符串转换为byte数组
* @param s String
* @return byte[]
*/
public static byte[]
stringToBytes(String s) {
return s.getBytes();
}
/**
* 将高字节数组转换为int
* @param b byte[]
* @return int
*/
public static int
hBytesToInt(byte[] b) {
int s = 0;
for (int i = 0; i < 3; i++) {
if (b >= 0) {
s = s + b;
} else {
s = s + 256 + b;
}
s = s * 256;
}
if (b[3] >= 0) {
s = s + b[3];
} else {
s = s + 256 + b[3];
}
return s;
}
/**
* 将低字节数组转换为int
* @param b byte[]
* @return int
*/
public static int
lBytesToInt(byte[] b) {
int s = 0;
for (int i = 0; i < 3; i++) {
if (b[3-i] >= 0) {
s = s + b[3-i];
} else {
s = s + 256 + b[3-i];
}
s = s * 256;
}
if (b[0] >= 0) {
s = s + b[0];
} else {
s = s + 256 + b[0];
}
return s;
}
/**
* 高字节数组到short的转换
* @param b byte[]
* @return short
*/
public static
short hBytesToShort(byte[] b) {
int s = 0;
if (b[0] >= 0) {
s = s + b[0];
} else {
s = s + 256 + b[0];
}
s = s * 256;
if (b[1] >= 0) {
s = s + b[1];
} else {
s = s + 256 + b[1];
}
short result = (short)s;
return result;
}
/**
* 低字节数组到short的转换
* @param b byte[]
* @return short
*/
public static short
lBytesToShort(byte[] b) {
int s = 0;
if (b[1] >= 0) {
s = s + b[1];
} else {
s = s + 256 + b[1];
}
s = s * 256;
if (b[0] >= 0) {
s = s + b[0];
} else {
s = s + 256 + b[0];
}
short result = (short)s;
return result;
}
/**
* 高字节数组转换为float
* @param b byte[]
* @return float
*/
public static float
hBytesToFloat(byte[] b) {
int i = 0;
Float F = new Float(0.0);
i = ((((b[0]&0xff)<<8 | (b[1]&0xff))<<8) | (b[2]&0xff))<<8 | (b[3]&0xff);
return F.intBitsToFloat(i);
}
/**
* 低字节数组转换为float
* @param b byte[]
* @return float
*/
public static float
lBytesToFloat(byte[] b) {
int i = 0;
Float F = new Float(0.0);
i = ((((b[3]&0xff)<<8 | (b[2]&0xff))<<8) | (b[1]&0xff))<<8 | (b[0]&0xff);
return F.intBitsToFloat(i);
}
/**
* 将byte数组中的元素倒序排列
*/
public static byte[]
bytesReverseOrder(byte[] b) {
int length = b.length;
byte[] result = new byte[length];
for(int i=0; i<length; i++) {
result[length-i-1] = b;
}
return result;
}
/**
* 打印byte数组
*/
public static void
printBytes(byte[] bb) {
int length = bb.length;
for (int i=0; i<length; i++) {
System.out.print(bb + " ");
}
System.out.println("");
}
public static void
logBytes(byte[] bb) {
int length = bb.length;
String out = "";
for (int i=0; i<length; i++) {
out = out + bb + " ";
}
}
/**
* 将int类型的值转换为字节序颠倒过来对应的int值
* @param i int
* @return int
*/
public static int
reverseInt(int i) {
int result = FormatTransfer.hBytesToInt(FormatTransfer.toLH(i));
return result;
}
/**
* 将short类型的值转换为字节序颠倒过来对应的short值
* @param s short
* @return short
*/
public static short
reverseShort(short s) {
short result = FormatTransfer.hBytesToShort(FormatTransfer.toLH(s));
return result;
}
/**
* 将float类型的值转换为字节序颠倒过来对应的float值
* @param f float
* @return float
*/
public static float
reverseFloat(float f) {
float result = FormatTransfer.hBytesToFloat(FormatTransfer.toLH(f));
return result;
}
}
Java字节序
发表评论
-
Java 静态代理模式与装饰者模式的本质区别
2019-10-22 11:00 756我们在学习 Spring 时会先学习代理 ... -
使用quartz 致命的问题反思
2018-11-22 11:00 1033一段时间没有用 quartz 了,所以就随手写一个守护程序 ... -
JAVA 以GET方式提交数据中文乱码,如果配置tomcat配置
2018-04-18 10:15 441解决方法非常简单,只要在 tomcat/conf/ser ... -
Eclipse 下载安装插件提示 Read time out (超时) 解决办法
2017-05-25 15:09 1620加入以下参数到eclipse.ini文件中,找到-vmarg ... -
(可行) 使用 sigar 时,出现UnsatisfiedLinkError
2017-04-26 11:13 537sigar 工具类主要是用于收集操作系统信息及系统信 ... -
(惨痛教训) java runtime().exec() 提示 No such file or directory
2017-04-07 15:14 4197最近花了三天解决 ... -
(测试可用)JSP 页面通过 ajax 导出附件(下载文件)实际
2016-04-12 11:02 837在前端不能真的以 ajax 去请求,而是应该用隐藏的 for ... -
(转)jquery操作select(取值,设置选中)
2014-08-06 18:15 921每一次操作select的时候,总是要出来翻一下资料,不如自己 ... -
<jsp:include ><jsp:forward> 配合 <jsp:param> 乱码问题解决
2013-07-22 02:04 1620在 JSP 动作元素: <jsp:inclu ... -
centos 安装 JDK 1.6 时,出现 unrecognized class file version
2013-04-10 11:02 1113出现这种情况,主要是因为CENTOS 5.0 的系统已经预安 ... -
tomcat 的web项目CPU、内存占用100%(经测试可行)
2012-12-13 19:41 1476近期上线的项目运行时,发现CPU有时能占到100% ... -
JAVA RMI 外网访问实例
2012-11-01 10:57 0JAVA RMI 使用分布式程序变得简单 -
(转)java生成Excel(JXL类库)
2012-07-06 15:32 956jxl是java操作excel的工具, 在开源世界中,有两套比 ... -
linux 下安装 jdk
2011-08-24 08:36 1173在linux 下安装 JDK, 也不会很难,按以下的步骤来就行 ... -
java 取得 src 下的文件
2011-07-25 15:20 825PropertyFileUtils p = new Prope ... -
eclipse 插件安装不上解决办法
2011-05-24 14:44 1224有时候安装eclipse插件时,发现插件及link 都写好了, ... -
JPA 与 Hibernate 整合的Spring配置
2011-04-08 12:12 15931. 先配置 PersistenceUnit ,在 persi ... -
Hibernate 最基本的内容
2011-02-23 20:52 981Hibernate 的所有操作都基于Session进行的,增、 ... -
Linux中JDK-JRE的安装和配置方法
2011-02-14 12:10 1805一.安装JDK 从sun网站上直接下载JDK:htt ... -
用commons-logging与log4j 输入日志的配置
2011-02-10 22:50 12751. commons-logging.properties ...
相关推荐
Java 网络字节序转换是编程过程中一个重要的概念,尤其在跨平台通信和处理二进制数据时。字节序是指多字节数据(如整数或浮点数)在内存或文件中存储的顺序。主要有两种字节序:Big-Endian(大端字节序)和 Little-...
Java中的默认字节序是网络字节序,也就是大端字节序。 2. **解析过程**:将16进制字符串转换为浮点数,通常涉及以下步骤: - 将16进制字符串转换为字节数组,每个字节对应一个16进制字符。 - 根据字节序调整字节...
二进制杂谈 1、十进制、二进制、十六进制 2、计算机储存单位 3、进制转换 4、有符号编码 5、反码的设计原理 6、二进制的位运算 7、位操作符 8、内存与内存地址 9、字节序 10、Java解码 11、Java编码
**字节序与Java字节序:** 字节序决定了多字节数据在内存中的存储顺序。Java使用**大端字节序**,即高位字节存储在低地址,低位字节存储在高地址。 **JDK与JRE的区别:** 1. **JDK**:包含JRE,提供Java开发工具,...
Java的`DataInputStream`和`DataOutputStream`类提供了处理基本数据类型(如int、float)的方法,并且在写入时会自动处理字节序(大端或小端)。而`ObjectInputStream`和`ObjectOutputStream`则用于序列化和反序列化...
需要注意的是,Java的标准字节序是大端字节序,但是这并不意味着所有的硬件平台都遵循这个标准。因此,在进行字节序转换时,尤其是在跨平台的环境中,我们需要特别注意字节序的问题,以确保数据的一致性和正确性。 ...
对于字节序转换,Java提供了`java.nio.ByteOrder`类,可以方便地在大端和小端之间切换。 PHP是另一种常用的Web开发语言,其文件操作主要通过`fopen`、`fwrite`和`fread`等函数完成。在网络字节流方面,PHP提供了`...
Java字节码指令集是Java虚拟机(JVM)执行程序的基础,它是Java源代码经过编译后的二进制表示形式。每个字节码指令都由一个操作码(Opcode)和可能的操作数组成,用于控制JVM执行各种操作。本文将深入探讨Java字节码...
字节序转换辅助类,short大小端转换,ushort大小端转换,int大小端转换,uint大小端转换,long大小端转换,ulong大小端转换; short类型 小端转大端,short类型 大端转小端,int类型 小端转大端,int类型 大端转小端...
因此,当Java(使用小端字节序)和C++(可能使用大端或小端,取决于硬件平台)进行通信时,需要进行字节序转换。 在C++中,结构体是一种自定义数据类型,可以包含不同类型的数据成员。为了通过Socket发送,需要将...
例如,在大端序中,最高位的字节在数组的最前面,而在小端序中,最高位的字节在数组的最后面。 在实际应用中,这些转换可能会涉及到更多的边界检查和错误处理,例如检查输入数组的长度是否符合要求,以及处理可能的...
"Java整型数与网络字节序byte[]数组转换关系详解" 本文主要介绍了Java整型数与网络字节序byte[]数组之间的转换关系,包括整型数到byte[]数组的转换和byte[]数组到整型数的转换。这些转换关系在Java和C/C++之间的...
本篇文章主要探讨了Java如何与C、C++、Delphi等Windows编程语言进行数据类型的转换,尤其是针对字节序(endianness)的问题。 字节序是指多字节数据类型(如int、float等)在内存中的存储顺序。主要有两种字节序:...
本主题聚焦于一个特定的工具或源码,即“16进制单精度(32位)浮点型转换器”,它能够将32位的浮点数在16进制表示与十进制表示之间进行转换,并考虑到了不同的字节序——大端和小端。 首先,我们要理解16进制和...
5. 大端字节序(bigendian)和小端字节序(littleendian):在计算机中,不同硬件平台可能会有不同的字节序表示法。JVM规范了字节码使用大端字节序,但当字节码运行在小端字节序的CPU上时,可能需要进行适当的转换。 6....
- **Java的字节序**:Java采用大端字节序,意味着在多字节数据中,高位字节存储在低地址处。 4. **JDK与JRE的区别**: - **JDK**:Java开发工具包,包含了Java编译器、调试器、文档生成工具等,用于开发和运行...
Java默认使用大端字节序,而BMP文件使用小端字节序存储数据。因此,读取BMP文件时,必须将读取到的数据进行字节序转换,才能正确解析文件内容。 例如,`constructInt`函数通过将四个字节重新排序来构建一个整数,以...
在传输前,需要将结构体数据转换为网络字节序,Java的`java.nio.ByteOrder`和C++的`htonl`, `ntohl`等函数可用来处理字节序问题。 5. **跨语言通信的库和框架**: - **JNI(Java Native Interface)**:Java提供...
这将生成一个名为`HelloWorldApp.class`的字节码文件。然后,通过`java`命令来运行程序: ```sh java HelloWorldApp ``` 如果一切正常,控制台会输出“Hello World!”。 #### 5. Applet概述与实现 Applet是一种...
4. 平台兼容性:由于Java和C语言的字节序不同,可能需要在数据传输前进行字节序转换。例如,Java是大端序,而大多数C编译器默认为小端序。可以使用`java.nio.ByteBuffer`的`order()`方法在Java端设置字节序,C语言端...