32位二进制转8位的十六进制怎么转 要写个程序,完成题目功能,要求不能通过十进制中转,直接从二进制转到十六进制,不准用API里的二进制转十六进制的方法.输入的二进制当字符串输入.(我用的是BLUEJ,输入数据时总是按int接收.) 谢谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 将32位二进制整数存入4×8的数组里。然后将每行的四个数按以下方法运算。a[0] = b[0][0]+(b[0][1]<<1)+(b[0][2]<<2)+(b[0][3]<<3);...依次类推,然后将得出的a[0..3]以16进制输出。 给你点思路:import java.util.HashMap;import java.util.Map;public class Test { private Map<String, String> binaryHexPairs; // 二进制, 十六进制对照表 public Test() { binaryHexPairs = new HashMap<String, String>(); binaryHexPairs.put("0001", "1"); binaryHexPairs.put("0010", "2"); binaryHexPairs.put("0011", "3"); binaryHexPairs.put("0100", "4"); binaryHexPairs.put("0101", "5"); binaryHexPairs.put("0110", "6"); binaryHexPairs.put("0111", "7"); binaryHexPairs.put("1000", "8"); binaryHexPairs.put("1001", "9"); binaryHexPairs.put("1010", "A"); binaryHexPairs.put("1011", "B"); binaryHexPairs.put("1100", "C"); binaryHexPairs.put("1101", "D"); binaryHexPairs.put("1110", "E"); binaryHexPairs.put("1111", "F"); } public String binaryToHex(String binaryString) { int prefixLen = (4 - binaryString.length() % 4) % 4; String prefix = ""; for (int i = 0; i < prefixLen; ++i) { prefix += "0"; } binaryString = prefix + binaryString; // 按四的倍数把二进制补齐, 不足的前面补0 // 四个二进制位转换成一个十六进制位 StringBuilder sb = new StringBuilder("0x"); for (int i = 0; i < binaryString.length(); i += 4) { sb.append(binaryHexPairs.get(binaryString.substring(i, i + 4))); } return sb.toString(); } public static void main(String[] args) { Test t = new Test(); // String binaryString = "101111"; String binaryString = "1001100111011101010010101"; System.out.println(t.binaryToHex(binaryString)); }} 检查发现, 少了一个0的对, 加上去就可以了:binaryHexPairs.put("0000", "0"); 感动得内牛满面啊,我之前想到了用MAP,但是老师和同学给的思路都是用字符串substring,charAt操作做,所以一直在字符串上纠结.有一个问题,关于前面补零的,int prefixLen = (4 - binaryString.length() % 4) % 4 看不懂,最后为什么要%4.为什么不直接用32-binaryString.length()呢.高手请轻拍. 如果用binaryString.length(),则在001 1101这种情况下,后面4位能正常求出16进制数,但前面3位001在map中却不是关键字,找不到对应的16进制值,要把001补齐为等值四位的 0001 才能找到对应的16进制的值。 明白了! 最后的%4是预防长度为4的整数倍的情况.我的332-binaryString.length() 补了太多零. 比如有14位,要补两个零,而不是补18个零.好人啊! 也谢谢楼上其他的朋友! Long time no see Java.因为在招聘会上听人家公司忽悠说Java不行了。结果,几个月的时间就晃过去了。回头一看,还是Java好。 java -cp 和java -jar啥区别? System.arraycopy 如何将EXCEL中的XLS文件导出成XML文件 java 不能获取到串口 java能否获取jpg图片的Exif信息? 想写一个显示本机开放端口的程序~不会写~大家能给点提示么? ~~~~~~~~~~菜鸟问题 如何配置一个最简单的聊天室呢 ~~~~~~~~~~~~~ 新手遇到的关于包的引入的问题,麻烦各位高手帮看一眼,谢过先! 求救: 苹果版的LookandFeel , 哪位大侠有? Java中setFont() JTree编辑节点 JAVA SE中图片切换的时候,也就是重画面板的时候能不能做出翻书的效果?
然后将每行的四个数按以下方法运算。
a[0] = b[0][0]+(b[0][1]<<1)+(b[0][2]<<2)+(b[0][3]<<3);
.
.
.
依次类推,然后将得出的a[0..3]以16进制输出。
import java.util.HashMap;
import java.util.Map;public class Test {
private Map<String, String> binaryHexPairs; // 二进制, 十六进制对照表 public Test() {
binaryHexPairs = new HashMap<String, String>();
binaryHexPairs.put("0001", "1");
binaryHexPairs.put("0010", "2");
binaryHexPairs.put("0011", "3");
binaryHexPairs.put("0100", "4");
binaryHexPairs.put("0101", "5");
binaryHexPairs.put("0110", "6");
binaryHexPairs.put("0111", "7");
binaryHexPairs.put("1000", "8");
binaryHexPairs.put("1001", "9");
binaryHexPairs.put("1010", "A");
binaryHexPairs.put("1011", "B");
binaryHexPairs.put("1100", "C");
binaryHexPairs.put("1101", "D");
binaryHexPairs.put("1110", "E");
binaryHexPairs.put("1111", "F");
} public String binaryToHex(String binaryString) {
int prefixLen = (4 - binaryString.length() % 4) % 4;
String prefix = "";
for (int i = 0; i < prefixLen; ++i) {
prefix += "0";
}
binaryString = prefix + binaryString; // 按四的倍数把二进制补齐, 不足的前面补0 // 四个二进制位转换成一个十六进制位
StringBuilder sb = new StringBuilder("0x");
for (int i = 0; i < binaryString.length(); i += 4) {
sb.append(binaryHexPairs.get(binaryString.substring(i, i + 4)));
} return sb.toString();
} public static void main(String[] args) {
Test t = new Test();
// String binaryString = "101111";
String binaryString = "1001100111011101010010101";
System.out.println(t.binaryToHex(binaryString));
}}
binaryHexPairs.put("0000", "0");
我的332-binaryString.length() 补了太多零. 比如有14位,要补两个零,而不是补18个零.
好人啊! 也谢谢楼上其他的朋友!
因为在招聘会上听人家公司忽悠说Java不行了。结果,几个月的时间就晃过去了。
回头一看,还是Java好。