前段时间有个项目是通过报文协议与硬件进行交互,在实现的过程中整理了一些通用的数据转换方法,方便项目的使用,特此记录一下,具体实现如下,如有需要的可以参考一下,希望会有帮助......

/**

* byte转无符号int

* @param s 转换值

* @return 无符号

*/

public static int toUnsigned(byte s) {

return s & 0xFF;

}

/**

* byte数组转换为无符号short整数

*

* @param bytes byte数组

* @param changeHi 是否进行高低位转换,true低位在前高位在后,false高位在前低位在后

* @return short整数

*/

public static long bytesToUnsignedShort(byte[] bytes,boolean changeHi) {

int t = 0;

if(changeHi) {

for (int i = bytes.length - 1; i >= 0; i--) {

if(i == bytes.length - 1)

t = (bytes[i]&0xFF)<

else

t = t|(bytes[i]&0xFF)<

}

return t;

}

else {

for(int i=0;i

if(i == 0)

t = (bytes[i]&0xFF);

else

t = t|(bytes[i]&0xFF)<

}

return t;

}

}

/**

* byte数组转换为无符号short整数

*

* @param bytes byte数组

* @param changeHi 是否进行高低位转换,true低位在前高位在后,false高位在前低位在后

* @return short整数

*/

public static int byte2ToUnsignedShort(byte[] bytes,boolean changeHi) {

if(changeHi)

return (bytes[1] << 8 & 0xFF00) | (bytes[0] & 0xFF);

else

{

return (((bytes[0] & 0xFF)<<8)|(bytes[1] & 0xFF));

}

}

/**

* byte数组转换为无符号short整数

*

* @param bytes byte数组

* @return short整数

*/

public static int byte3ToUnsignedShort(byte[] bytes,boolean changeHi) {

int b0 = bytes[0] & 0xFF;

int b1 = bytes[1] & 0xFF;

int b2 = bytes[2] & 0xFF;

if(changeHi)

return (b2 << 16) | (b1 << 8) | b0;

else

return (b0 << 16)|(b1 << 8) | b2;

}

/**

* byte数组转换为无符号short整数

*

* @param bytes byte数组

* @return short整数

*/

public static long byte4ToUnsignedShort(byte[] bytes,boolean changeHi) {

long b0 = bytes[0] & 0xFF;

long b1 = bytes[1] & 0xFF;

long b2 = bytes[2] & 0xFF;

long b3 = bytes[3] & 0xFF;

if(changeHi)

return (b3 << 24) | (b2 << 16) | (b1 << 8) | b0;

else

return (b0 << 24) | (b1 << 16) | (b2 << 8) | b3;

}

/**

* byte数组转换为无符号short整数

*

* @param bytes byte数组

* @return short整数

*/

public static long byte5ToUnsignedShort(byte[] bytes,boolean changeHi) {

long b0 = bytes[0] & 0xFF;

long b1 = bytes[1] & 0xFF;

long b2 = bytes[2] & 0xFF;

long b3 = bytes[3] & 0xFF;

long b4 = bytes[4] & 0xFF;

if(changeHi)

return (b4 << 32) | (b3 << 24) | (b2 << 16) | (b1 << 8) | b0;

else

return (b0 << 32)|(b1<<24)|(b2<<16)|(b3<<8)|b4;

}

/**

* byte数组转换为无符号short整数

*

* @param bytes byte数组

* @return short整数

*/

public static long byte8ToUnsignedShort(byte[] bytes,boolean changeHi) {

long b0 = bytes[0] & 0xFF;

long b1 = bytes[1] & 0xFF;

long b2 = bytes[2] & 0xFF;

long b3 = bytes[3] & 0xFF;

long b4 = bytes[4] & 0xFF;

long b5 = bytes[5] & 0xFF;

long b6 = bytes[6] & 0xFF;

long b7 = bytes[7] & 0xFF;

if(changeHi)

return (b7 << 56) | (b6 << 48) | (b5 << 40) | (b4 << 32) | (b3 << 24) | (b2 << 16) | (b1 << 8) | b0;

else

return (b0<<56)|(b1<<48)|(b2<<40)|(b3<<32)|(b4<<24)|(b5<<16)|(b6<<8)|b7;

}

/**

* Convert byte[] to hex string.这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串。

*

* @param src byte[] data

* @return hex string

*/

public static String bytesToHexString(byte[] src,char slicer) {

StringBuilder stringBuilder = new StringBuilder();

if (src == null || src.length <= 0) {

return null;

}

for (byte b : src) {

int v = b & 0xFF;

String hv = Integer.toHexString(v);

if (hv.length() < 2) {

stringBuilder.append(0);

}

stringBuilder.append(hv);

if('\0'!=slicer)

stringBuilder.append(slicer);

}

if('\0'!=slicer)

stringBuilder.deleteCharAt(stringBuilder.length()-1);

return stringBuilder.toString();

}

/**

* 将 10 进制转化为二进制

*

* @param de :待转换的十进制

* @return :转换后的二进制(string)

*/

public static String Decimal2Binary(long de,int byteNum) {

StringBuilder numstr = new StringBuilder();

while (de > 0) {

long res = de % 2; //除2 取余数作为二进制数

numstr.insert(0, res);

de = de / 2;

}

int len = numstr.length();

if(len<=byteNum*8){

int cha = byteNum*8-len;

for(int i=0;i

numstr.insert(0,0);

}

}

return numstr.toString();

}

/**

* 将 10 进制转化为八进制

*

* @param de :待转换的十进制

* @return :转换后的八进制(string)

*/

public static String Decimal2Oct(long str){

return Long.toOctalString(str);

}

public static String Decimal2Hex(long str){

return Long.toHexString(str);

}

/**

* byte数组转成16进制的字符串

*

* @param bytes

* @return

*/

final protected static char[] hexArray = "0123456789ABCDEF".toCharArray();

public static String bytesToHexString(byte[] bytes) {

char[] hexChars = new char[bytes.length * 2];

for (int j = 0; j < bytes.length; j++) {

int v = bytes[j] & 0xFF;

hexChars[j * 2] = hexArray[v >>> 4];

hexChars[j * 2 + 1] = hexArray[v & 0x0F];

}

return new String(hexChars);

}

/**

* 将 16 进制字符串转化为int

*

* @param de :待转换的16进制

* @return :转换后的int

*/

public static int string16ToInt(String hex,boolean changeHi){

String temp = hex.replaceAll("^0[x|X]", "");

int i = 0;

if(changeHi){

if(temp.length()==2){

i=Integer.parseInt(temp, 16);

}else if(temp.length()==4){

temp = temp.substring(2,4)+temp.substring(0,2);

i=Integer.parseInt(temp, 16);

}else {

i=Integer.parseInt(temp, 16);

}

}else {

i=Integer.parseInt(temp, 16);

}

return i;

}

/**

* 整形转字节数组

*

* @param iSource 源

* @param iArrayLen 长度

* @return 数组

*/

public static byte[] intTobye(int iSource, int iArrayLen,boolean changeHi) {

if(changeHi) {

byte[] bLocalArr = new byte[iArrayLen];

for (int i = 0; (i < iArrayLen); i++) {

bLocalArr[i] = (byte) (iSource >> 8 * i & 0xFF);

}

return bLocalArr;

}else {

byte[] bLocalArr = new byte[iArrayLen];

for (int i = iArrayLen-1; i >=0; i--) {

bLocalArr[i] = (byte) ((iSource >> 8 * i) & 0xFF);

}

return bLocalArr;

}

}

/**

* 把long值转byte[]

* @param iSource 待转long值

* @param iArrayLen 需转成多少byte数组长度

* @param changeHi 是否高位在前,true高位在前,false低位在前

* @return

*/

public static byte[] longTobye(long iSource, int iArrayLen,boolean changeHi) {

byte[] bLocalArr = new byte[iArrayLen];

if(changeHi) {

for (int i = 0; (i < 8) && (i < iArrayLen); i++) {

bLocalArr[i] = (byte) (iSource >> 8 * i & 0xFF);

}

}else {

for (int i = iArrayLen-1; i >=0; i--) {

bLocalArr[i] = (byte) (iSource >> 8 * i & 0xFF);

}

}

return bLocalArr;

}

/**

* byte转无符号整型

*

* @param bytes 数组

* @return 整型

*/

public static int bytesToInt(byte[] bytes,boolean changeHi) {

if(changeHi) {

int i1 = bytes[0] & 0xff;

int i2 = (bytes[1] & 0xff) << 8;

int i3 = (bytes[2] & 0xff) << 16;

int i4 = (bytes[3] & 0xff) << 24;

return i1 | i2 | i3 | i4;

}else {

int i1 = (bytes[0] & 0xff) << 24;

int i2 = (bytes[1] & 0xff) << 16;

int i3 = (bytes[2] & 0xff) << 8;

int i4 = (bytes[3] & 0xff);

return i1 | i2 | i3 | i4;

}

}

/**

* 返回一段字节数组

*

* @param src 源

* @param begin 开始

* @param count 位数

* @return 一段字节数组

*/

public static byte[] SubBytes(byte[] src, int begin, int count) {

byte[] bs = new byte[count];

if (src.length > begin && src.length > count && src.length >= begin + count) {

System.arraycopy(src, begin, bs, 0, count);

}

return bs;

}

java转换工具类_Java数据转换工具类相关推荐

  1. java 加减乘除 工具类_Java数学工具类MathUtil详解

    package cn.xbz.util.math; import java.math.BigDecimal; /** * @title 数学计算工具类 * @description 提供常用的数值加减 ...

  2. java date 操作类_JAVA时间操作类常用方法汇总

    1.JAVA中日期的获取.设置和格式化 (1)JAVA提供了3个日期类:Date.Calendar和DateFormat. Date()方法主要用于创建日期对象并获取日期: Calendar()方法主 ...

  3. java简单通讯录的实现02person类_Java中Math类的简单介绍

    我想对于Math类大家一定很熟悉了,是Java提供的一个用来进行简单数学运算的工具类.对于Math类来说,常用的方法有: 加法 public static int addExact(int x, in ...

  4. java 反射 本类_Java 反射 Class类

    Java 反射 Class类 @author ixenos 摘要:Class类在反射中的地位.构造Class对象的三种方式.Class对象构造对应类型对象的三种方式 Class类在反射中的地位 位于j ...

  5. java 系统 类_Java常用实体类--System类

    字符串.日期.数字是Java程序中最常使用的数据对象,对这些数据的创建.修改.格式化和转换等操作融入在Java程序的每个角落,必须熟练掌握.本节将通过实例演示以下常用实体类Java系统级类:系统类Sy ...

  6. java 枚举的继承_java中枚举类可以被继承吗?

    java 枚举类 java中,使用关键字enum来定义枚举类,枚举类是一个特殊的类,大部分功能和普通类是一样的,区别为: ● 枚举类继承了java.lang.Enum类,而不是默认的Object类.而 ...

  7. java创建一个人函数类_Java对象和类–学习如何创建和实现

    对象和类被认为是任何基于OOPs的语言的精华.由于Java是最常用的面向对象编程语言之一,因此非常有必要牢记这些概念.因此,我为您带来这篇文章,在这里我将给您一个完整的Java对 对象和类被认为是任何 ...

  8. java unsafe 类_Java的Unsafe类

    本文转载自:https://www.cnblogs.com/pkufork/p/java_unsafe.html 最近在看Java并发包的源码,发现了神奇的Unsafe类,仔细研究了一下,在这里跟大家 ...

  9. java实验三多态性_Java实验3 类的多态性和接口

    实验3 类的多态性和接口 一.实验目的 理解面向对象的多态性.理解接口和实现接口的类的关系,掌握一个类实现多个接口的声明和使用方法. 二.实验内容 1.程序理解: 接口的应用 //接口的应用 //定义 ...

最新文章

  1. AI一分钟 | 网信办暂停快手、火山小视频算法推荐功能;无需人类司机,加州将允许自动驾驶汽车接送乘客
  2. 大数据和python哪个好_大数据语言之争:Java和python哪个好?
  3. web安全之点击劫持攻击(clickjack)
  4. css 样式三元运算_20条书写CSS代码的建议
  5. java禁止js获取cookie_java中Cookie被禁用后Session追踪问题
  6. Semantic-UI的React实现(一):架构介绍
  7. matlab x轴特殊符号,matlab中的特殊符号
  8. 在信息流上,百度或许可以给谷歌信息流支个招
  9. Linux 修改密码出现“鉴定令牌操作错误”
  10. JavaScript基础及画布
  11. java任务队列_java 任务队列
  12. Gabor特征码分析
  13. 如何关闭笔记本自带键盘
  14. 解决docker容器启动时候无法映射端口的问题
  15. CSS DIV 滚动(CSS,HTML)
  16. 2021-06-03 一只小小白K 期许未来!
  17. 【高级数理统计R语言学习】9 无序多分类分析
  18. 当易方达张坤遇招商白酒侯昊
  19. OneNote无法登录 遇到临时服务器问题
  20. aec java ios_Java並發編程之原子操作類

热门文章

  1. java线程在什么时候结束,java – 什么时候线程超出范围?
  2. 【数据结构与算法】之深入解析“灯泡开关”的求解思路与算法示例
  3. 207. Course Schedule 课程表
  4. 7.Vue 列表渲染
  5. 你不会真的以为自己懂得计算机网络吧?
  6. 数据库开发——MySQL——pymysql模块
  7. The directory '*' or its parent directory is not owned by the current user
  8. 【工业控制】What is a Waveform
  9. 【C++】 C++字符串类
  10. 【C语言】Linux内核源码--min,swap宏定义