将字符串转为16进制数_java语言解析16进制串并完成二进制的转化,包括补零操作...

cd57e5e060f213da5af111e4924639f5.png

新到一家公司,项目是跟卫星相关的,需要很多协议,领导让我按协议的格式把16进制串转为二进制然后拆分成他们协议格式的各种数据,很久没碰过java中socket类了,网上找的一段代码,然后开始实现。计算机基础比较薄弱,对于进制,字节,位运算理解不深。实现起来十分费力,甚至有些不知如何下手,无奈一通恶补基础知识,询问老同事,终于对进制有了更深的理解。不墨迹,代码如下,希望可以帮到跟我一样半路转行的兄弟姐妹们。

public class Test { public static void main(String[] args) { new Thread( new DD()).start(); //先开启接收端的线程
}
} //接收 class DD implements Runnable {
@Override public void run() { try {
ServerSocket ss = new ServerSocket(9977);
Socket s = ss.accept();
InputStream is = s.getInputStream(); byte[] buf = new byte[1024]; int[] iss = new int[1024];
StringBuffer sb = new StringBuffer(); int line; while ((line = is.read(buf)) != -1) { if( line > 0 ) { for( int x = 0 ; x < line ; x++ ) {
iss[x] = buf[x] & 0xff; /**& 0xff为了让计算机补码一致,因为当系统检测到byte可能会转化成int或者说byte与int类型进行运算的时候,就会将byte的内存空间高位补1(也就是按符号位补位)扩充到32位,再参与运算。 上面的0xff其实是int类型的字面量值,所以可以说byte与int进行运算。*/
String hv = Integer. toHexString(iss[x]); //整形转16进制 if (hv.length() < 2) { //***一个字节用16进制表示就是一个两位或者一位的数,其中1位的要用0补全
sb.append(0);
}
sb.append(hv); //sb.append(Integer.toHexString(iss[x]));
}
}
System. out.println(sb.toString());
String sss = sb.toString(); //转化完成的十六进制字符串
StringBuffer result = new StringBuffer(); for ( int i = 0; i < sss.length(); i++) { //将16进制字符串每个字符便利出来
String aa = sss.substring(i, i+1); //转化为二进制字符串
String dfd = Long. toString(Long. parseLong(aa,16) , 2); for( int x = 0 ; x < 4 - dfd.length() ; x++ ) { //如果二进制字符串缺少0则补0,EB90转二进制为1110 1011 1001 0000
result.append( "0");
}
result.append(dfd + ",");
} //转化为二进制字符串
String twoStr = result.toString().substring(0, result.length() - 1);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值