为什么我的 Bit String to Hex String 代码没有打印出结果?

Why isn't my Bit String to Hex String code printing the result?

我正在尝试打印位字符串到十六进制字符串的转换结果,但它什么也没打印。换句话说 000110011101 应该打印“19d”是我的临时变量问题吗?

在此先感谢您的帮助,这是我的代码:

public static void BinaryToHex() {
        Scanner scanner = new Scanner(System.in);
        String bitString = "";
        String hexString = "";

    String[] hex = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C",
            "D", "E", "F" };
    String[] binary = { "0000", "0001", "0010", "0011", "0100", "0101", "0110",
            "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" };

    System.out.println("Enter a bit string: ");
    bitString = scanner.next();

    for (int i = 0; i < bitString.length(); i++) {
        char temp = bitString.charAt(i);
        String temp2 = "" + temp + "";
        for (int j = 0; j < binary.length; j++) {
            if (temp2.equalsIgnoreCase(binary[j])) {
                hexString = hexString + hex[j];
            }
        }
    }

    System.out.print("The equivalent hex string is ");
    System.out.println(hexString);
}

您的 temp2 字符串每次都在外部 for 循环内重新定义,循环遍历输入字符串的 char。这意味着 temp2 实际上永远不会包含超过一个符号(因为它在循环的每次迭代中都会重置),因此永远不会等于 binary 数组中的任何字符串。

您需要先在循环外将 temp2 字符串定义为 String temp2 = "",然后在循环内将 temp 附加到它。

for (int i = 0; i < bitString.length(); i++) {
        char temp = bitString.charAt(i);
        String temp2 = "" + temp + "";
        for (int j = 0; j < binary.length; j++) {
            if (temp2.equalsIgnoreCase(binary[j])) {
                hexString = hexString + hex[j];
            }
        }
    }

在此循环中,您尝试一次获取位串的一个字符,并将其与所有输入长度为 4 的二进制 [] 数组的输入进行比较。所以基本上你试图将 1 长度元素与 4 长度元素进行比较,这永远不会是真的。

因此 HexString 永远不会改变,它会打印出与您初始化时相同的内容 it.So 您在执行代码时什么也得不到。

你可以有一个长度为 4 的 bitString 子串并将其存储在 temp2 中,然后这段代码将起作用,并且对于每个 4 位都有一个 HexCharacter 所以你不能制作 1 位数转换为二进制数。

所以按照你的逻辑,bitString length 应该是 4 的倍数,否则它不会从 hex 数组中给出相应的十六进制字符。

用这个替换代码中的 for 循环。

if(bitString.length()%4!=0)
    System.out.println("Please Enter Valid Input.");
else
{
    for (int i = 0; i < bitString.length()/4; i++) 
    {
        String temp2 = bitString.substring(4*i,4*(i+1));
        for (int j = 0; j < binary.length; j++)
            {
            if (temp2.equalsIgnoreCase(binary[j]))
                {
                hexString = hexString + hex[j];
            }
        }
    }
    System.out.print("The equivalent hex string is ");
    System.out.println(hexString);
}