由于项目中经常遇到与设备进行交互获取数据,不仅有Python版本、还有Java版本,还可能会有C#版本,在此做个记录。

一、十六进制转换工具类

主要包含十六进制字符串转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

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

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

int pos = i * 2;

d[i] = (byte) (charToByte(hexChars[pos]) <

}

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) <

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();

}

}

在此基础上进行封装、抽象后即可处理十六进制数据的传输与接收问题。

java 16进制_JAVA十六进制数据接收与传输相关推荐

  1. java byte转16进制_Java 十六进制(Hex)与byte数组之间的转换

    一.十六进制(Hex)与字节(byte)的概念 十六进制(Hex):计算机中数据的一种表示方法,它由0-9,A-F组成,字母不区分大小写.与10进制的对应关系是:0-9对应0-9:A-F对应10-15 ...

  2. java如何接收十六进制_JAVA十六进制数据接收与传输

    由于项目中经常遇到与设备进行交互获取数据,不仅有Python版本.还有Java版本,还可能会有C#版本,在此做个记录. 一.十六进制转换工具类 主要包含十六进制字符串转ASCII,ASCII转十六进制 ...

  3. java 16进制工具

    package w;/*** 16进制工具类* 数据存储* 计算机中数据的存储都是用补码方式存储的.一个数的二进制序列它的最高位是符号位.0表示正数,1表示负数* 反码:* 一个数是正,则它的反码与原 ...

  4. java 16进制 累加,java 16进制求和示例

    java 16进制求和,也就是16进制字节求二进制和,自己写的逻辑有点问题,不能满足需求,故从网上搜了下,满足了需求,代码如下public class Jinzhi16Util { public St ...

  5. java 字节 16进制_Java字节数组和16进制字符串的互相转化

    背景基础知识: 1.1. "字符"是由数字来表示的 先来重新了解一下计算机是如何处理"字符"的,这个原理是大家必须记住的,特别是在用JAVA写程序的时候,万万不 ...

  6. java字节数组转换成16进制_Java 将字节数组转化为16进制的多种方案

    很多时候我们需要将字节数组转化为16进制字符串来保存,尤其在很多加密的场景中,例如保存密钥等.因为字节数组,除了写入文件或者以二进制的形式写入数据库以外,无法直接转为为字符串,因为字符串结尾有\0,当 ...

  7. java 16进制转成字符串_java 16进制转成字符串

    java 将十六进制转化成字符串方法: public static String toStringHex(String s) { byte[] baKeyword = new byte[s.lengt ...

  8. java 16进制转64进制_Java进制概述及进制间的相互转换

    什么是进制? 进制也是进位制,是人们规定的一种进位方法.对于任何一种进制--X进制,就表示某一位置上的数运算时是逢X进一位.十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推. 十进 ...

  9. java long转16进制_java 16进制与10进制等转换 | 学步园

    /十进制转16进制 String s = "16"; String _hex = Integer.toHexString(Integer.parseInt(s)); System. ...

最新文章

  1. 【Go】Go基础(四):流程控制(控制结构)
  2. 【Kotlin】Lambda 表达式 ( 简介 | 表达式语法 | 表达式类型 | 表达式返回值 | 调用方式 | 完整示例 )
  3. textarea 高度调整
  4. 沈南鹏:从五大物理定律看新商业法则
  5. 3.2 读入两个参数
  6. Android之创建选项菜单
  7. 【Oracle经典】132个oracle热门精品资料——下载目录收藏 (转载)
  8. 给机器人罗宾写一封英语回信_近10年高考英语书面表达真题及范文大汇总! 把握高考命题新趋势!...
  9. Pandas入门教程(四)
  10. 12个有趣的C语言问答_sunyrising-ChinaUnix博客
  11. python软件下载3版本-Python3.9下载
  12. html历史记录代码,js 实现浏览历史记录示例
  13. 信息技术智库丨月度大考试
  14. credit author statement
  15. ndo2db: Warning: Retrying message send. This can occur
  16. MessageBox confirm弹框确认和取消按钮的使用-回调
  17. Python pyautogui支持的按键的字符
  18. LWIP-TCP Server连接两次之后无法连接问题
  19. Molecular Psychiatry:海马及其相关网络在电休克抗抑郁中的机制研究
  20. 忘了微信密码怎么办_微信密码忘记了怎么办 怎么找回密码【图文】

热门文章

  1. Python实现十大经典排序算法
  2. python编程技巧1002python编程技巧_总结Python编程中三条常用的技巧
  3. 2dpsk调制解调实验matlab_ila抓取数据,matlab分析,调试AD9361信号通路
  4. php like %%,thinkphp实现like模糊查询实例
  5. vsftp虚拟用户权限问题
  6. 【JavaScript】数学计算的函数与数字的格式化
  7. 利用html sessionStorge 来保存局部页面在刷新后回显,保留
  8. pfSense 2.3.5发布!汉化包同步发布!
  9. 03bash特性详解
  10. Android事件传递机制(转)