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各种数据对象相互转化
序列化的定义 序列化就是一种用来处理对象流的机制 所谓对象流也就是将对象的内容进行流化.可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间. 序列化是将对象转换为容易传输的格式的过程 例 ...
随机推荐
- 一起学Makefile(二)
Makefile基本概念示例 新建一个Code文件夹来测试一个简单的makefile 目录结构如下: 源码如下: makefile依赖: 一般在编写makefile之前都需要先分析清楚整个工程各个模块 ...
- 运行java程序的时候出现Exception in thread "main" java.lang.UnsupportedClassVersionError:
1 Exception in thread "main" java.lang.UnsupportedClassVersionError: com/test/inherited/In ...
- 使用List中remove方法时需要注意的问题
String str1 = new String("1"); String str2 = new String("2"); String str3 = new ...
- 一分钟理解什么是REST和RESTful
从事web开发工作有一小段时间,REST风格的接口,这样的词汇总是出现在耳边,然后又没有完全的理解,您是不是有和我相同的疑问呢?那我们一起来一探究竟吧! 就是用URL定位资源,用HTTP描述操作. 知 ...
- VIM 命令速查表
今天整理一份 VIM 常用命令速查表,当做给自己备忘. 进入VIM 相关 命令 描述 vim filename 打开或者新建文件 vim +n filename 打开文件并将光标置于第n行行首 vim ...
- Delaunay和Voronoi
什么是Delaunay三角剖分? 图1:Delaunay三角剖分偏爱小角度 给定平面中的一组点,三角剖分指的是将平面细分为三角形,这些点为顶点.在图1中,我们在左侧图像上看到了一组地标,在中间图像上看 ...
- 微信小程序 获取地理位置信息
app.json "permission":{ "scope.userLocation": { "desc": "你的位置信息将用 ...
- 004 制作自己的Java镜像
一:制作镜像 1.需要的知识 dockfile docker build Jpress : http://jpress.io/ 开源免费的新媒体运营系统 2.下载jpress http:/ ...
- WebDataBinder 学习顺序
01. 关于Spring属性处理器PropertyResolver以及应用运行环境Environment的深度分析,强大的StringValueResolver使用和解析[享学Spring] http ...
- 什么时候会进行 SpringMVC重定向保存参数(FlashMap)?
SpringMVC重定向保存参数(FlashMap):两种情况会保存参数: 1. 当前视图为RedirectView,也即是说当前请求为重定向请求. org.springframe ...