一、十六进制转换工具类

主要包含十六进制字符串转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十六进制数据接收与传输的更多相关文章

  1. 页面ajax请求传参及java后端数据接收

    js ajax请求传参及java后端数据接收 Controller: package com.ysl.PassingParameters.controller; import java.util.Li ...

  2. TCP通信实现对接硬件发送与接收十六进制数据 & int与byte的转换原理 & java中正负数的表示

    今天收到的一份需求任务是对接硬件,TCP通信,并给出通信端口与数据包格式,如下: 1.首先编写了一个简单的十六进制转byte[]数组与byte[]转换16进制字符串的两个方法,如下: /** * 将十 ...

  3. Java TCP异步数据接收

    之前一直采用.Net编写服务端程序,最近需要切换到Linux平台下,于是尝试采用Java编写数据服务器.TCP异步连接在C#中很容易实现,网上也有很多可供参考的代码.但Java异步TCP的参考资料较少 ...

  4. Java Post 数据请求和接收

    这两天在做http服务端请求操作,客户端post数据到服务端后,服务端通过request.getParameter()进行请求,无法读取到数据,搜索了一下发现是因为设置为text/plain模式才导致 ...

  5. stm32 usb数据接收与数据发送程序流程分析

    http://blog.csdn.net/u011318735/article/details/17424349 既然学习了USB,那就必须的搞懂USB设备与USB主机数据是怎么通讯的.这里主要讲设备 ...

  6. 【ALB技术笔记】基于多线程方式的串行通信接口数据接收案例

    基于多线程方式的串行通信接口数据接收案例 广东职业技术技术学院  欧浩源 1.案例背景 在本博客的<[CC2530入门教程-06]CC2530的ADC工作原理与应用>中实现了电压数据采集的 ...

  7. STM32CubeMX HAL库串口+DMA数据发送不定长度数据接收

    参考资料:1.ST HAL库官网资料 2.https://blog.csdn.net/u014470361/article/details/79206352#comments 一.STM32CubeM ...

  8. 【ALB学习笔记】基于多线程方式的串行通信接口数据接收案例

    基于多线程方式的串行通信接口数据接收案例 广东职业技术技术学院  欧浩源 1.案例背景 在本博客的<[CC2530入门教程-06]CC2530的ADC工作原理与应用>中实现了电压数据采集的 ...

  9. 序列化+fastjson和java各种数据对象相互转化

    序列化的定义 序列化就是一种用来处理对象流的机制 所谓对象流也就是将对象的内容进行流化.可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间. 序列化是将对象转换为容易传输的格式的过程 例 ...

随机推荐

  1. 回滚事件只是让原数据看起来不变,但是id还是会自增吗?

    回滚事件只是让原数据看起来不变,但是id还是会自增对吗? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...

  2. cocos Uniforms值的赋值

    cocos Uniforms值的赋值 举个void Renderer::drawBatchedTriangles()的渲染: //Start drawing verties in batch for( ...

  3. Http协议以及Httpclient

    一.HTTP之请求消息Request 客户端发送一个HTTP请求到服务器的请求消息包括以下格式: 请求行(request line).请求头部(header).空行和请求数据四个部分组成. Http请 ...

  4. The Five Qualities You Need in a Partner

    The Five Qualities You Need in a Partner Things I Never Considered Before Getting Married (But Shoul ...

  5. dubbo源码分析之过滤器Filter-12

    https://blog.csdn.net/luoyang_java/article/details/86682668 Dubbo 是阿里巴巴开源的一个高性能优秀的服务框架,使得应用可通过高性能的 R ...

  6. CMake版本低,需要更高版本.

    https://blog.csdn.net/qq_34935373/article/details/90266958 使用cmake命令安装Opencv软件时,报如下错误: CMake Error a ...

  7. java.lang.ClassNotFoundException: com.*.*.entity.time.Q*

    @Entity 实体类 java.lang.ClassNotFoundException: com.*.*.entity.time.Q* 添加依赖 1.添加DSL依赖 <!--query dsl ...

  8. 查找算法(7)--Hash search--哈希查找

    1.哈希查找 (1)什么是哈希表(Hash) 我们使用一个下标范围比较大的数组来存储元素.可以设计一个函数(哈希函数, 也叫做散列函数),使得每个元素的关键字都与一个函数值(即数组下标)相对应,于是用 ...

  9. Linux命令-nohup和&

    基础 在linux终端或控制台上执行命令时,可能不希望脚本占住屏幕需要在后台执行脚本,有几种方法让脚本在后台执行: & 当在前台运行某个作业时,终端被该作业占据:可以在命令后面加上& ...

  10. k8s记录-kubectl常用命令

    kubectl kubectl annotate – 更新资源的注解.kubectl api-versions – 以“组/版本”的格式输出服务端支持的API版本.kubectl apply – 通过 ...