JAVA十六进制数据接收与传输
一、十六进制转换工具类
主要包含十六进制字符串转ASCII,ASCII转十六进制字符串以及十六进制字符串转Byte数组等方法:
/**
* Created by wly on 2018/4/17.
*/
public class HexConvert { public static String convertStringToHex(String str){ char[] chars = str.toCharArray(); StringBuffer hex = new StringBuffer();
for(int i = 0; i < chars.length; i++){
hex.append(Integer.toHexString((int)chars[i]));
} return hex.toString();
} public static String convertHexToString(String hex){ StringBuilder sb = new StringBuilder();
StringBuilder sb2 = new StringBuilder(); for( int i=0; i<hex.length()-1; i+=2 ){ String s = hex.substring(i, (i + 2));
int decimal = Integer.parseInt(s, 16);
sb.append((char)decimal);
sb2.append(decimal);
} return sb.toString();
}
public static byte[] hexStringToBytes(String hexString) {
if (hexString == null || hexString.equals("")) {
return null;
}
// toUpperCase将字符串中的所有字符转换为大写
hexString = hexString.toUpperCase();
int length = hexString.length() / 2;
// toCharArray将此字符串转换为一个新的字符数组。
char[] hexChars = hexString.toCharArray();
byte[] d = new byte[length];
for (int i = 0; i < length; i++) {
int pos = i * 2;
d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
}
return d;
}
//返回匹配字符
private static byte charToByte(char c) {
return (byte) "0123456789ABCDEF".indexOf(c);
} //将字节数组转换为short类型,即统计字符串长度
public static short bytes2Short2(byte[] b) {
short i = (short) (((b[1] & 0xff) << 8) | b[0] & 0xff);
return i;
}
//将字节数组转换为16进制字符串
public static String BinaryToHexString(byte[] bytes) {
String hexStr = "0123456789ABCDEF";
String result = "";
String hex = "";
for (byte b : bytes) {
hex = String.valueOf(hexStr.charAt((b & 0xF0) >> 4));
hex += String.valueOf(hexStr.charAt(b & 0x0F));
result += hex + " ";
}
return result;
} public static void main(String[] args) { System.out.println("======ASCII码转换为16进制======");
String str = "*00007VERSION\\n1$";
System.out.println("字符串: " + str);
String hex = HexConvert.convertStringToHex(str);
System.out.println("====转换为16进制=====" + hex); System.out.println("======16进制转换为ASCII======");
System.out.println("Hex : " + hex);
System.out.println("ASCII : " + HexConvert.convertHexToString(hex)); byte[] bytes = HexConvert.hexStringToBytes( hex ); System.out.println(HexConvert.BinaryToHexString( bytes ));
}
}
二、接收数据
 public class UdpReceiverThread {
 public static void main(String[] args) throws Exception {
 // 定义一个接收端,并且指定了接收的端口号
 DatagramSocket socket = new DatagramSocket(6070);
 while (true) {
     byte[] buf = new byte[1024*5];
     // 解析数据包
     DatagramPacket packet = new DatagramPacket(buf, buf.length);
     socket.receive(packet);
     String ip = packet.getAddress().getHostAddress();
     buf = packet.getData();
     //将字节数组转换为16进制字符串
     String hexString = HexConvert.BinaryToHexString( buf );//含有空格,如:2A 30 30 30 30 37 56 45 52 53 49 4F 4E 5C 6E 31 24 
     hexString =  hexString.replace( " ","" );//去除空格
     String asc = HexConvert.convertHexToString( hexString );//转为ASCII,如:*00007VERSION\n1$
     System.out.println("收到 " + ip + " 发来的消息:" + asc);
 }
 }
 }
三、发送数据
 public class UDPSenderThread {
 public static void main(String[] args) throws Exception {
 DatagramSocket socket = new DatagramSocket();
 String serial = "*00007VERSION\\n1$";//串口字符串
 String hex = HexConvert.convertStringToHex(serial);//转化为十六进制字符串:2a303030303756455253494f4e5c6e3124
 byte[] buf = HexConvert.hexStringToBytes( hex );//将十六进制字符串转为字节数组
 //将数据打包
 DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.11.139"), 6070);
 socket.send(packet);
 socket.close();
 }
 }
转载自坏菠萝
原文链接:https://blog.csdn.net/abcwanglinyong/article/details/79978061
JAVA十六进制数据接收与传输的更多相关文章
- 页面ajax请求传参及java后端数据接收
		js ajax请求传参及java后端数据接收 Controller: package com.ysl.PassingParameters.controller; import java.util.Li ... 
- TCP通信实现对接硬件发送与接收十六进制数据 & int与byte的转换原理 & java中正负数的表示
		今天收到的一份需求任务是对接硬件,TCP通信,并给出通信端口与数据包格式,如下: 1.首先编写了一个简单的十六进制转byte[]数组与byte[]转换16进制字符串的两个方法,如下: /** * 将十 ... 
- Java TCP异步数据接收
		之前一直采用.Net编写服务端程序,最近需要切换到Linux平台下,于是尝试采用Java编写数据服务器.TCP异步连接在C#中很容易实现,网上也有很多可供参考的代码.但Java异步TCP的参考资料较少 ... 
- Java Post 数据请求和接收
		这两天在做http服务端请求操作,客户端post数据到服务端后,服务端通过request.getParameter()进行请求,无法读取到数据,搜索了一下发现是因为设置为text/plain模式才导致 ... 
- stm32 usb数据接收与数据发送程序流程分析
		http://blog.csdn.net/u011318735/article/details/17424349 既然学习了USB,那就必须的搞懂USB设备与USB主机数据是怎么通讯的.这里主要讲设备 ... 
- 【ALB技术笔记】基于多线程方式的串行通信接口数据接收案例
		基于多线程方式的串行通信接口数据接收案例 广东职业技术技术学院 欧浩源 1.案例背景 在本博客的<[CC2530入门教程-06]CC2530的ADC工作原理与应用>中实现了电压数据采集的 ... 
- STM32CubeMX HAL库串口+DMA数据发送不定长度数据接收
		参考资料:1.ST HAL库官网资料 2.https://blog.csdn.net/u014470361/article/details/79206352#comments 一.STM32CubeM ... 
- 【ALB学习笔记】基于多线程方式的串行通信接口数据接收案例
		基于多线程方式的串行通信接口数据接收案例 广东职业技术技术学院 欧浩源 1.案例背景 在本博客的<[CC2530入门教程-06]CC2530的ADC工作原理与应用>中实现了电压数据采集的 ... 
- 序列化+fastjson和java各种数据对象相互转化
		序列化的定义 序列化就是一种用来处理对象流的机制 所谓对象流也就是将对象的内容进行流化.可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间. 序列化是将对象转换为容易传输的格式的过程 例 ... 
随机推荐
- uni-app下拉刷新加载刷新数据
			onPullDownRefresh监听该页面用户下拉刷新事件需要在 pages.json 里开启 enablePullDownRefresh "globalStyle": { } ... 
- BDE在 win7 找不到存储过程myproc;1
			BDE在 win7 找不到存储过程myproc;1 在odbc配置的完成的最后一步,有个使用ANSI引用的标识符,勾去掉试试 不行的话还有个执行字符串数据翻译勾去掉试试 
- CentOS 7上安装Apache
			安装apache yum install httpd vi /etc/httpd/conf/httpd.conf 修改默认端口为81 service httpd start netstat -nltp ... 
- OpenFOAM——在钝板上分离的层流
			本算例来自<ANSYS Fluid Dynamics Verification Manual>中的VMFL063: Separated Laminar Flow Over a Blunt ... 
- 【Gamma阶段】第四次Scrum Meeting
			冰多多团队-Gamma阶段第四次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 卓培锦 修改可移动button以及button手感反馈优化 编辑器风格切换(夜间模式) 牛雅哲 修复bug并 ... 
- chmod: changing permissions of ‘/etc/fstab': Read-only file system
			给passwd文件加权限,修改/etc/fstab目录下所有的文件夹属性为可写可读可执行,执行以下命令:chomd 777 /etc/fstab 的时候提示错误: chmod: changing pe ... 
- Error-ASP.NET:未能加载文件或程序集“CMSCalendar”或它的某一个依赖项。系统找不到指定的文件。
			ylbtech-Error-ASP.NET:未能加载文件或程序集“CMSCalendar”或它的某一个依赖项.系统找不到指定的文件. 1.返回顶部 1. “/”应用程序中的服务器错误. 分析器错误 说 ... 
- UltraISO安装windows10时0x8007000D错误解决办法
			进入安装界面之后提示错误:windows无法打开所需的文件 F:\Sources\install.wim.请确保安装所需的所有文件可用,并重新启动安装.错误代码:0x8007000D 原因: 肯定是i ... 
- (mysql)找不到请求的.Net Framework Data Provider。可能没有安装
			webconfig配置以下节点(注意版本号) 将下面代码放在machine.config中文件,如何Web.config文件没有配置,需要添加 <system.data> <DbPr ... 
- cisco 交换机设置时区、时间、同步日志本地时间
			Core-Switch-1#show clockCore-Switch-1#show ntp statusCore-Switch-1#conf tCore-Switch-1(config)# cloc ... 
