java的socket通信如何直接接收16进制数据 100
由于处理数据时需要按照协议来处理,所以需要16进制数据,有写过接收到字符型然后转化为16进制,觉得有点麻烦,有没有办法直接接收16进制数据?...
由于处理数据时需要按照协议来处理,所以需要16进制数据,有写过接收到字符型然后转化为16进制,觉得有点麻烦,有没有办法直接接收16进制数据?
展开
5个回答
展开全部
发送消息之前转码为16进制
Java code
public static final String encodeHex(String msg) {
byte[] bytes = null;
try {
bytes = msg.getBytes("GBK");
} catch (java.io.UnsupportedEncodingException e) {
e.printStackTrace();
}
StringBuffer buff = new StringBuffer(bytes.length * 4);
String b;
char a;
int n = 0;
int m = 0;
for (int i = 0; i < bytes.length; i++) {
b = Integer.toHexString(bytes[i]);
if (bytes[i] > 0) {
buff.append("00");
buff.append(b);
n = n + 1;
} else {
a = msg.charAt((i - n) / 2 + n);
m = a;
b = Integer.toHexString(m);
buff.append(b.substring(0, 4));
i = i + 1;
}
}
return buff.toString();
}
Java code
public static final String encodeHex(String msg) {
byte[] bytes = null;
try {
bytes = msg.getBytes("GBK");
} catch (java.io.UnsupportedEncodingException e) {
e.printStackTrace();
}
StringBuffer buff = new StringBuffer(bytes.length * 4);
String b;
char a;
int n = 0;
int m = 0;
for (int i = 0; i < bytes.length; i++) {
b = Integer.toHexString(bytes[i]);
if (bytes[i] > 0) {
buff.append("00");
buff.append(b);
n = n + 1;
} else {
a = msg.charAt((i - n) / 2 + n);
m = a;
b = Integer.toHexString(m);
buff.append(b.substring(0, 4));
i = i + 1;
}
}
return buff.toString();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
public class Demo {
public static void main(String[] args) {
byte[] result = decodeHex("020D2B20202030303032311303");
for(byte b : result) {
System.out.println(b);
}
}
public static byte[] decodeHex(String nm) {
int len = nm.length();
byte[] result = new byte[len/2];
for(int i = 0; i<len; i++) {
char c = nm.charAt(i);
byte b = Byte.decode("0x" + c);
c = nm.charAt(++i);
result[i/2] = (byte) (b << 4 | Byte.decode("0x" + c));
}
return result;
}
}
public static void main(String[] args) {
byte[] result = decodeHex("020D2B20202030303032311303");
for(byte b : result) {
System.out.println(b);
}
}
public static byte[] decodeHex(String nm) {
int len = nm.length();
byte[] result = new byte[len/2];
for(int i = 0; i<len; i++) {
char c = nm.charAt(i);
byte b = Byte.decode("0x" + c);
c = nm.charAt(++i);
result[i/2] = (byte) (b << 4 | Byte.decode("0x" + c));
}
return result;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这么专业的问题可能很难有比较准确的答案吧
你这是死马当活马医啊
你这是死马当活马医啊
更多追问追答
追问
不需要准确答案,只需要粘贴一句接收16进制数据的代码就行,能用的话就给分
追答
16进制是什么东东 ~~~~(>_<)~~~~ 文科生你伤不起啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
传之前将16进制本转化为2进制收到再将2进制转化为16进制
更多追问追答
追问
额,另一端是一个电子器件,无法将16进制转化为2进制发送
追答
那能给你传过来字符串?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
网络传输字符串类型。
追问
什么意思?
我用调试工具传输16进制数据时,接收到的还是字符串
我的意思是直接接收16进制,不要转化为字符串
追答
网络传输函数给的就是字符串类型,这是给我们接口,没办法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询