udp 接收数据转换

今天在工作中,用udp进行网络通信的时候,client端接收数据后,为了检验正确性,把byte[]转换成十六进制字符串打印。但输出的十六进制字符串中除了server端发送的内容外,后面还有很多的0。

例:

本来的结果应该是:

61616161616101000000D8010F00000069703B63656C6C69643B6273736964

转换后的结果却是:61616161616101000000D8010F00000069703B63656C6C69643B62737369640000000000000000000000000000000000000000……

后来查找发现:原来 是写的转换方法有问题。


public static String bytes2HexString(byte[] b) {
String ret = "";
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
ret += hex.toUpperCase();
}
return ret;
}

这个转换方法里,是直接用b的长度来实现的。但是在udp接收数据时,可能一次接到的数据长度达不到定义的buffer长度。但在转换的时候却是直接用byte[]长度来访问的。所以导致把接到的数据后面的空的也转换出来,用0填补。把方法改成下面的之后,就可以。

/*
*byte[] :要转换的byte数组

*int: 要转换的byte数组的长度

*/

public static String bytes2HexString(byte[] b,int len) {
String ret = "";
for (int i = 0; i < len; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
ret += hex.toUpperCase();
}
return ret;
}



转换的时候要按byte[]的实际长度。


以上仅作笔记。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值