java中数值转换的总结
来源:互联网 发布:tcp 51 udp 端口 编辑:程序博客网 时间:2024/06/06 20:12
在与硬件交互时,需要将这种数值转成字节数据,按照某种协议进行传递,其中很重要的是数值和byte之间的转化。
public final class ModbusUtil { /** * 字节数组转十六进制字符串 * * @param data * @return */ public static final String valueToHex(byte[] data) { if (data == null) { return ""; } return valueToHex(data, 0, data.length); } /** * 截取主要信息(包含子功能码),不需要获取全部 * * @param data * @return */ public static final String toSumaryHex(byte[] data) { if (Utils.ifNeedCompLog()) { if (data == null) { return ""; } return valueToHex(data, 0, data.length); } if (data == null) { return ""; } if (data.length < 8) { return "data is not right"; } String funcCode = ModbusUtil.valueToHex(new byte[]{data[7]}); switch (funcCode) { case "41": case "83": case "86": case "c1": return valueToHex(data, 7, 9); default: return valueToHex(data, 7, 8); } } /** * 字节数组转十六进制字符串 * * @param data * @param off * @param length * @return */ public static final String valueToHex(byte[] data, int off, int length) { StringBuffer stringBuffer = new StringBuffer(data.length * 2); for (int i = off; i < length; i++) { if (((int) data[i] & 0xff) < 0x10) { stringBuffer.append("0"); } stringBuffer.append(Long.toString((int) data[i] & 0xff, 16)); if (i < data.length - 1) { stringBuffer.append(" "); } } return stringBuffer.toString(); } public static final int hexStrToInt(String hexStr) { if (TextUtils.isEmpty(hexStr)) { return -1; } String result = hexStr.substring(2); return Integer.parseInt(result, 16); } /** * 整型转换十六进制数组 * * @param i * @return */ public static final byte[] valueToHex(int i) { StringBuffer stringBuffer = new StringBuffer(2); if ((i & 0xff) < 0x10) { stringBuffer.append("0"); } stringBuffer.append(Long.toString(i & 0xff, 16).toUpperCase()); return stringBuffer.toString().getBytes(Charset.defaultCharset()); } /** * 字节数组转无符号Short * * @param bytes * @return */ public static final int regToUnsignedShort(byte[] bytes) { if (bytes == null) { return -1; } return ((bytes[0] & 0xff) << 8 | (bytes[1] & 0xff)); } public static final int regToUnsignedShort(byte one, byte two) { return ((one & 0xff) << 8 | (two & 0xff)); } /** * 无符号short转字节数组 * * @param v * @return */ public static final byte[] unsignedShortToReg(int v) { byte[] regs = new byte[2]; regs[0] = (byte) (0xff & (v >> 8)); regs[1] = (byte) (0xff & v); return regs; } /** * 字节数组转short * * @param bytes * @return */ public static final short regToShort(byte[] bytes) { if (bytes == null) { return 0; } return (short) ((bytes[0] << 8) | (bytes[1] & 0xff)); } /** * 字节数组转short * * @param bytes * @return */ public static final short regToShort(byte[] bytes, int idx) { return (short) ((bytes[idx] << 8) | (bytes[idx + 1] & 0xff)); } /** * short转字节数组 * * @param s * @return */ public static final byte[] shortToReg(short s) { byte[] regs = new byte[2]; regs[0] = (byte) (0xff & (s >> 8)); regs[1] = (byte) (0xff & s); return regs; } /** * 字节数组转int * * @param bytes * @return */ public static final int regToInt(byte[] bytes) { if (bytes == null || bytes.length != 4) { return 0; } return (((bytes[0] & 0xff) << 24) | ((bytes[1] & 0xff) << 16) | ((bytes[2] & 0xff) << 8) | (bytes[3] & 0xff)); } /** * 字节数组低位转int * * @param bytes * @return */ public static final int regToIntByLittle(byte[] bytes) { return ((bytes[0] & 0xff) | ((bytes[1] & 0xff) << 8) | ((bytes[2] & 0xff) << 16) | (bytes[3] & 0xff) << 24); } /** * 小端字节数组解析 */ public static short bytesToShortByLittle(byte[] bytes, int idx) { if (bytes == null) { return 0; } return (short) (((bytes[idx + 1] & 0xff) << 8) | (bytes[idx] & 0xff)); } /** * 将byte转成无符号的值对应的int * * @param value * @return */ public static final int byteToUnsignedInt(byte value) { return (int) (value & 0xFF); } /** * int转字节数组 * * @param v * @return */ public static final byte[] intToReg(int v) { byte[] regs = new byte[4]; regs[0] = (byte) (0xff & (v >> 24)); regs[1] = (byte) (0xff & (v >> 16)); regs[2] = (byte) (0xff & (v >> 8)); regs[3] = (byte) (0xff & v); return regs; } /** * 字节数组转long * * @param bytes * @return */ public static final long regToLong(byte[] bytes) { return ((((long) (bytes[0] & 0xff) << 56) | ((long) (bytes[1] & 0xff) << 48) | ((long) (bytes[2] & 0xff) << 40) | ((long) (bytes[3] & 0xff) << 32) | ((long) (bytes[4] & 0xff) << 24) | ((long) (bytes[5] & 0xff) << 16) | ((long) (bytes[6] & 0xff) << 8) | ((long) (bytes[7] & 0xff)))); } /** * long转字节数组 * * @param v * @return */ public static final byte[] longToReg(long v) { byte[] regs = new byte[8]; regs[0] = (byte) (0xff & (v >> 56)); regs[1] = (byte) (0xff & (v >> 48)); regs[2] = (byte) (0xff & (v >> 40)); regs[3] = (byte) (0xff & (v >> 32)); regs[4] = (byte) (0xff & (v >> 24)); regs[5] = (byte) (0xff & (v >> 16)); regs[6] = (byte) (0xff & (v >> 8)); regs[7] = (byte) (0xff & v); return regs; } /** * 字节数组转float * * @param bytes * @return */ public static final float regToFloat(byte[] bytes) { return Float .intBitsToFloat((((bytes[0] & 0xff) << 24) | ((bytes[1] & 0xff) << 16) | ((bytes[2] & 0xff) << 8) | (bytes[3] & 0xff))); } /** * float转字节数组 * * @param f * @return */ public static final byte[] floatToReg(float f) { return intToReg(Float.floatToIntBits(f)); } /** * 字节数组转double * * @param bytes * @return */ public static final double regToDouble(byte[] bytes) { return Double .longBitsToDouble(((((long) (bytes[0] & 0xff) << 56) | ((long) (bytes[1] & 0xff) << 48) | ((long) (bytes[2] & 0xff) << 40) | ((long) (bytes[3] & 0xff) << 32) | ((long) (bytes[4] & 0xff) << 24) | ((long) (bytes[5] & 0xff) << 16) | ((long) (bytes[6] & 0xff) << 8) | ((long) (bytes[7] & 0xff))))); } /** * double转字节数组 * * @param d * @return */ public static final byte[] doubleToReg(double d) { return longToReg(Double.doubleToLongBits(d)); } /** * byte转int * * @param b * @return */ public static final int unsignedByteToInt(byte b) { return (int) b & 0xFF; }// unsignedByteToInt}
记录如上!加油
阅读全文
0 0
- java中数值转换的总结
- Java中数值类型之间的转换
- Java中数值类型之间的转换
- C#中数值的进制转换总结介绍
- [Java 数值] 数值类型之间的转换
- Java数值计算的总结
- JavaScript数值转换总结
- C++中数值--字符串间的转换
- C++中数值--字符串间的转换
- C++中数值--字符串间的转换
- C++中数值和字符串的转换
- java数值型货币的大写转换
- 字符串和数值的相互转换【java】
- java-数值类型之间的转换
- java 数值类型转换
- Java中把String变量里的数值型字符串转换成数值型的方法
- java中,数值计算时的类型转换 ( 两个int类型相加,赋值给double )
- java和Oracle中ip地址与数值的相互转换
- oracle 分组排序
- CSS-特点
- C++自定义String类(简单的实现功能)
- SQL Server OBJECT_ID() 函数
- 【Spring】Spring MVC原理及配置详解
- java中数值转换的总结
- Android性能调优利器StrictMode
- 这些自动贩卖机太棒了,在车站专卖短篇小说
- BZOJ 3135: [Baltic2013]pipes
- Android代码热修复基础-类只加载一次
- linux下的多线程编程
- 自己写的Linux基础笔记
- DES,RSA加解密,base64格式字符串转换,字典排序
- 面试题----SQL