一、十六进制转换工具类

主要包含十六进制字符串转ASCII,ASCII转十六进制字符串以及十六进制字符串转Byte数组等方法:

  1. /**
  2. * Created by wly on 2018/4/17.
  3. */
  4. public class HexConvert {
  5.  
  6. public static String convertStringToHex(String str){
  7.  
  8. char[] chars = str.toCharArray();
  9.  
  10. StringBuffer hex = new StringBuffer();
  11. for(int i = 0; i < chars.length; i++){
  12. hex.append(Integer.toHexString((int)chars[i]));
  13. }
  14.  
  15. return hex.toString();
  16. }
  17.  
  18. public static String convertHexToString(String hex){
  19.  
  20. StringBuilder sb = new StringBuilder();
  21. StringBuilder sb2 = new StringBuilder();
  22.  
  23. for( int i=0; i<hex.length()-1; i+=2 ){
  24.  
  25. String s = hex.substring(i, (i + 2));
  26. int decimal = Integer.parseInt(s, 16);
  27. sb.append((char)decimal);
  28. sb2.append(decimal);
  29. }
  30.  
  31. return sb.toString();
  32. }
  33. public static byte[] hexStringToBytes(String hexString) {
  34. if (hexString == null || hexString.equals("")) {
  35. return null;
  36. }
  37. // toUpperCase将字符串中的所有字符转换为大写
  38. hexString = hexString.toUpperCase();
  39. int length = hexString.length() / 2;
  40. // toCharArray将此字符串转换为一个新的字符数组。
  41. char[] hexChars = hexString.toCharArray();
  42. byte[] d = new byte[length];
  43. for (int i = 0; i < length; i++) {
  44. int pos = i * 2;
  45. d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
  46. }
  47. return d;
  48. }
  49. //返回匹配字符
  50. private static byte charToByte(char c) {
  51. return (byte) "0123456789ABCDEF".indexOf(c);
  52. }
  53.  
  54. //将字节数组转换为short类型,即统计字符串长度
  55. public static short bytes2Short2(byte[] b) {
  56. short i = (short) (((b[1] & 0xff) << 8) | b[0] & 0xff);
  57. return i;
  58. }
  59. //将字节数组转换为16进制字符串
  60. public static String BinaryToHexString(byte[] bytes) {
  61. String hexStr = "0123456789ABCDEF";
  62. String result = "";
  63. String hex = "";
  64. for (byte b : bytes) {
  65. hex = String.valueOf(hexStr.charAt((b & 0xF0) >> 4));
  66. hex += String.valueOf(hexStr.charAt(b & 0x0F));
  67. result += hex + " ";
  68. }
  69. return result;
  70. }
  71.  
  72. public static void main(String[] args) {
  73.  
  74. System.out.println("======ASCII码转换为16进制======");
  75. String str = "*00007VERSION\\n1$";
  76. System.out.println("字符串: " + str);
  77. String hex = HexConvert.convertStringToHex(str);
  78. System.out.println("====转换为16进制=====" + hex);
  79.  
  80. System.out.println("======16进制转换为ASCII======");
  81. System.out.println("Hex : " + hex);
  82. System.out.println("ASCII : " + HexConvert.convertHexToString(hex));
  83.  
  84. byte[] bytes = HexConvert.hexStringToBytes( hex );
  85.  
  86. System.out.println(HexConvert.BinaryToHexString( bytes ));
  87. }
  88. }

二、接收数据

  1. public class UdpReceiverThread {
  2.  
  3. public static void main(String[] args) throws Exception {
  4. // 定义一个接收端,并且指定了接收的端口号
  5. DatagramSocket socket = new DatagramSocket(6070);
  6.  
  7. while (true) {
  8. byte[] buf = new byte[1024*5];
  9. // 解析数据包
  10. DatagramPacket packet = new DatagramPacket(buf, buf.length);
  11.  
  12. socket.receive(packet);
  13.  
  14. String ip = packet.getAddress().getHostAddress();
  15.  
  16. buf = packet.getData();
  17.  
  18. //将字节数组转换为16进制字符串
  19. String hexString = HexConvert.BinaryToHexString( buf );//含有空格,如:2A 30 30 30 30 37 56 45 52 53 49 4F 4E 5C 6E 31 24
  20.  
  21. hexString = hexString.replace( " ","" );//去除空格
  22.  
  23. String asc = HexConvert.convertHexToString( hexString );//转为ASCII,如:*00007VERSION\n1$
  24.  
  25. System.out.println("收到 " + ip + " 发来的消息:" + asc);
  26.  
  27. }
  28.  
  29. }
  30. }

三、发送数据

  1. public class UDPSenderThread {
  2.  
  3. public static void main(String[] args) throws Exception {
  4. DatagramSocket socket = new DatagramSocket();
  5.  
  6. String serial = "*00007VERSION\\n1$";//串口字符串
  7.  
  8. String hex = HexConvert.convertStringToHex(serial);//转化为十六进制字符串:2a303030303756455253494f4e5c6e3124
  9.  
  10. byte[] buf = HexConvert.hexStringToBytes( hex );//将十六进制字符串转为字节数组
  11.  
  12. //将数据打包
  13. DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.11.139"), 6070);
  14.  
  15. socket.send(packet);
  16.  
  17. socket.close();
  18.  
  19. }
  20. }

转载自坏菠萝

原文链接: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. 一起学Makefile(二)

    Makefile基本概念示例 新建一个Code文件夹来测试一个简单的makefile 目录结构如下: 源码如下: makefile依赖: 一般在编写makefile之前都需要先分析清楚整个工程各个模块 ...

  2. 运行java程序的时候出现Exception in thread "main" java.lang.UnsupportedClassVersionError:

    1 Exception in thread "main" java.lang.UnsupportedClassVersionError: com/test/inherited/In ...

  3. 使用List中remove方法时需要注意的问题

    String str1 = new String("1"); String str2 = new String("2"); String str3 = new ...

  4. 一分钟理解什么是REST和RESTful

    从事web开发工作有一小段时间,REST风格的接口,这样的词汇总是出现在耳边,然后又没有完全的理解,您是不是有和我相同的疑问呢?那我们一起来一探究竟吧! 就是用URL定位资源,用HTTP描述操作. 知 ...

  5. VIM 命令速查表

    今天整理一份 VIM 常用命令速查表,当做给自己备忘. 进入VIM 相关 命令 描述 vim filename 打开或者新建文件 vim +n filename 打开文件并将光标置于第n行行首 vim ...

  6. Delaunay和Voronoi

    什么是Delaunay三角剖分? 图1:Delaunay三角剖分偏爱小角度 给定平面中的一组点,三角剖分指的是将平面细分为三角形,这些点为顶点.在图1中,我们在左侧图像上看到了一组地标,在中间图像上看 ...

  7. 微信小程序 获取地理位置信息

    app.json "permission":{ "scope.userLocation": { "desc": "你的位置信息将用 ...

  8. 004 制作自己的Java镜像

    一:制作镜像 1.需要的知识 dockfile docker build Jpress : http://jpress.io/       开源免费的新媒体运营系统 2.下载jpress http:/ ...

  9. WebDataBinder 学习顺序

    01. 关于Spring属性处理器PropertyResolver以及应用运行环境Environment的深度分析,强大的StringValueResolver使用和解析[享学Spring] http ...

  10. 什么时候会进行 SpringMVC重定向保存参数(FlashMap)?

    SpringMVC重定向保存参数(FlashMap):两种情况会保存参数:    1. 当前视图为RedirectView,也即是说当前请求为重定向请求.        org.springframe ...