将十六进制输入转换为二进制并计算所有1s -Java

时间:2016-08-26 16:39:39

标签: java binary hex

我需要帮助,这是我的任务。如何仅在给定十六进制输入的二进制数中计算1。它给出了二进制中有多少1和0的数字。

    package javaapplication3;
import java.util.*;
public class JavaApplication3 {
    public static void main(String[] args) {
         System.out.println("Enter the string you want printed : ");
         Scanner sc = new Scanner(System.in);
         String s = sc.next();
         int duck = 0;
         byte[] bytes = s.getBytes();
         StringBuilder binary = new StringBuilder();
         for (byte b : bytes){
             int val = b;
             for (int i = 0; i < 8; i++){
                 binary.append((val & 128) == 0 ? 0 : 1);
                 val <<= 1;
                if( val != 1) {
                    duck++;
             }
            }
             binary.append(' ');
         }
         System.out.println("'" + s + "' to binary: " + binary);
         System.out.println("Number of bit 1 in string: " + duck); 
}
}

它给了我一个输出:

  

输入您要打印的字符串:BABEFACE

     

'BABEFACE'到二进制:01000010 01000001 01000010 01000101 01000110   01000001 01000011 01000101

     

字符串中的第1位数:64

     

建立成功(总时间:10秒)

2 个答案:

答案 0 :(得分:0)

BABEFACE 就像二进制文件一样 1011 1010 1011 1110 1111 1010 1100 1110 给我......

且1的数量应为 24

解决这个问题的方法可能是:

  1. 将字符串解析为十六进制
  2. 转换为bin
  3. 计算1或0
  4. 实施例

    ViewPager

答案 1 :(得分:0)

要检查字符串中的所有“1”,只需使用for循环进行检查。它将是最快的(与String函数和正则表达式等相比)。

示例:

String binary = "";
binary = "01000010 01000001 01000010 01000101 01000110 01000001 01000011 01000101";

int counted_Ones = 0;

//# check "ones" in string
for( int i=0; i<binary.length(); i++ ) 
{ if(binary.charAt(i) == '1') { counted_Ones++; } }

System.out.println("binary: " + binary);
System.out.println("Number of bit 1 in string: " +  counted_Ones);

结果(来自System.out.println):

  

binary: 01000010 01000001 01000010 01000101 01000110 01000001   01000011 01000101
字符串中的第1位数: 20