本篇文章给大家谈谈java串口16进制读取,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、怎么用java读写16进制的数?2、java串口怎么给温控器发送16进制数3、Java串口通信发送十六进制的问题4、请问java下位机如何接收十六进制数呢?5、JAVA串口怎么发送16进制?
怎么用java读写16进制的数?
public static int hexToDec(String sn) {
if (null == sn 0 == sn.trim().length())
throw new IllegalArgumentException(“接收的参数 “” + sn + “” 不是十六进制表示形式!”);
final String P = “0x”;
if (sn.toLowerCase().startsWith(P)) {
final String regex = “[^\\da-fA-F]”;
int i = Regexutils.matcheRegexp(sn.substring(2), regex, false);
if (0 != i)
throw new IllegalArgumentException(“接收的参数 “” + sn
+ “” 不是十六进制表示形式!”);
else {
char[] cs = sn.substring(2).toUpperCase().toCharArray();
char c;
for (int j = 0; j cs.length; j++) {
c = cs[j];
i += toDec(c, (cs.length – j – 1));
}
return i;
}
}
return 0;
}
private static int toDec(char c, int i) {
final double N = 16.0;
int n = getNum(c);
int r = (int) (n * Math.pow(N, (double) i));
return r;
}
private static int getNum(char c) {
// 字符F转换成为数字为70
if ((int) c 70)
return 0;
int i = 0;
switch (c) {
case ”A”:
i = 10;
break;
case ”B”:
i = 11;
break;
case ”C”:
i = 12;
break;
case ”D”:
i = 13;
break;
case ”E”:
i = 14;
break;
case ”F”:
i = 15;
break;
case ”a”:
i = 10;
break;
case ”b”:
i = 11;
break;
case ”c”:
i = 12;
break;
case ”d”:
i = 13;
break;
case ”e”:
i = 14;
break;
case ”f”:
i = 15;
break;
}
if (0 == i) {
// 字符0转换成为数字为48
return (int) c – 48;
} else
return i;
}
java串口怎么给温控器发送16进制数
做串口通讯的时候基本都是通过io流读取、输出。那么在java开发中发送数据的时候使用OutputStream,而其write()的参数是字节数组、int整形。如果使用字节数组发送的时候,通常可以直接写成out.write(“1234”.getBytes())。这样一来单片机读到的数据则是31 32 33 34。但是在串口发送的时候先把16进制字符串转化为byte数组在发送出来,则是发送什么读取到的就是什么。使用:out.write(HexString2Bytes(“1234”));那么读取到的还是1234。16进制字符串转化为byte数组的方法为:
public static byte[] HexString2Bytes(String src) {
if (null == src || 0 == src.length()) {
return null;
}
byte[] ret = new byte[src.length() / 2];
byte[] tmp = src.getBytes();
for (int i = 0; i (tmp.length / 2); i++) {
ret[i] = uniteBytes(tmp[i * 2], tmp[i * 2 + 1]);
}
return ret;
}
在用java做串口开发的时候建议使用开源的Rxtx做。效率、使用方法都要优。使用sun开源的comm个人觉得不是很便利。rxtx网上有开源实例。可以根据自己个需求进行加以修饰利用。
Java串口通信发送十六进制的问题
对于输入输出来说,就只有二进制,没有十六进制的说法。
你还是说说,这个程序到底是要几个二进制位。
—————
你看看这样行不行。
试试下面这两种方法。
1.输出4个字节
int value = Integer.parseInt(“41”, 16);
out.write(value);
2.输出一个字节
byte value = Byte.parseByte(“41”, 16);
out.write(value);
请问java下位机如何接收十六进制数呢?
Scanner console =new Scanner(System.in);
System.out.print(“输入一个16进制的RGB颜色:”);
String strRGB = console.next();
int RGB = Integer.valueOf(strRGB, 16);
System.out.println(RGB);
你要是输入的数不是十六进制的就会错哈,我这儿没有加验证之类的…
JAVA串口怎么发送16进制?
那就需要转换了。
我最近也在做这样的项目,转换来,转换去麻烦死。
发送的16进制串要先转换为byte[]然后writer
接受方read()后要把字节在转换成16进制串。
//16进制串转换成字节数组
public static byte[] hexStringToBytes(String hexString)
{
if ((hexString == null) || (hexString.equals(“”))) {
return null;
}
hexString = hexString.toUpperCase();
int length = hexString.length() / 2;
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);
}
//字节数组转换成16进制串
public static String byte2HexStr(byte[] b, int length)
{
String hs = “”;
String stmp = “”;
for (int n = 0; n length; ++n) {
stmp = Integer.toHexString(b[n] 0xFF);
if (stmp.length() == 1)
hs = hs + “0” + stmp;
else {
hs = hs + stmp;
}
}
return hs.toUpperCase();
} 不明白+wo 448667
java串口16进制读取的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、java串口16进制读取的信息别忘了在本站进行查找喔。