Java中从字符到二进制到十六进制以及向后

Java中从字符到二进制到十六进制以及向后,java,arrays,string,binary,hex,Java,Arrays,String,Binary,Hex,为了解释我的问题,让我先解释一下我想做什么 这里有一个示例字符串:“12345678XA3VLX4321” 我需要将其转换为二进制,输出:“00110001 00110010 00110011 00110100 00110101 00110110 00110111 00111000 01011000 0100001 00110011 01010110 01001100 01011000 00110100 00110011 00110010 00110001” 现在我需要切割每个8位二进制序列的前

为了解释我的问题,让我先解释一下我想做什么

  • 这里有一个示例字符串:“12345678XA3VLX4321”

  • 我需要将其转换为二进制,输出:“00110001 00110010 00110011 00110100 00110101 00110110 00110111 00111000 01011000 0100001 00110011 01010110 01001100 01011000 00110100 00110011 00110010 00110001”

  • 现在我需要切割每个8位二进制序列的前两位,如下所示:“001100010010010010011 00110100 00110101 00110110 00110111 00111000 01011000 01011000 01000001 00110011 01010110 01001100 01011000 00110100 00110011 00110010 00110001”
    然后我有了“110001 110010 110011 110100 110101 110110 110111 111000 011000 000001 110011 010110 001100 011000 110100 110011 110010 110001”

  • 然后我需要附加两个6位二进制块“100000 100000”,所以我有:“110001 110010 110011 110100 110101 110110 110111 111000 011000 000001 110011 010110 001100 011000 110100 110011 110010 110001 100000”

  • 之后,我需要将二进制序列从4转换为十六进制:“C72CF4D76DF8601CD638D33CB1820”

  • 作为最后一步,我必须将“da”添加到十六进制序列中,所以它看起来是这样的:“dac72cf4d76df8601cd638d33cb1820”

  • 我用Java编写了一个程序,可以做到这一点。下面是代码:

    String input = txtInput.getText();
    byte[] bytes = input.getBytes();
    StringBuilder binary = new StringBuilder();
    
    // generate Binary sequence out of characters
    for (byte b : bytes) {
      int val = b;
      for (int i = 0; i < 8; i++) {
        binary.append((val & 128) == 0 ? 0 : 1);
        val <<= 1;
      }
      binary.append(' ');
    }
    
    String[] _arr = binary.toString().split("\\s");  // splits a string into an array, splitting by spaces
    
    // delete first two characters of every binary sequence
    for(int i = 0; i < _arr.length; i++) {
      _arr[i] = _arr[i].substring(2, 8);
    }
    
    String convertedArrayWithSpaces = convertArrayToStringMethodWithEmptySpace(_arr).toString(); // convert the array to a string
    convertedArrayWithSpaces = convertedArrayWithSpaces + "100000 100000"; // append two spaces at the end of the string
    
    String[] _arrFinal = convertedArrayWithSpaces.toString().split("\\s"); // splits a string into an array, splitting by spaces
    String convertedArrayFinal = convertArrayToStringMethod(_arrFinal); // converts an array to a string without spaces
    BigInteger b = new BigInteger(convertedArrayFinal, 2); // convert binary sequence to hex
    String finalResult = "da" + b.toString(); // add "da" to the string
    
    String input=txtInput.getText();
    byte[]bytes=input.getBytes();
    StringBuilder二进制文件=新的StringBuilder();
    //用字符生成二进制序列
    for(字节b:字节){
    int val=b;
    对于(int i=0;i<8;i++){
    binary.append((val&128)==0?0:1);
    
    val字母在原始序列中总是处于相同的位置吗?因为所有这些都是ASCII码,所以您只需要8位中的7位,这意味着
    11
    10
    永远不能是缺少的正确前缀。而且,由于表示数字的二进制总是以
    00
    开头,因此您需要
    00
    其中numBER是和
    01
    ,其中字母应该是。如果输入字符串可以是在任何位置由数字和字母组成的任何字符串,那么您尝试执行的操作是不可能的。例如
    “1”
    表示为字节的是
    00110001
    “q"
    0111001
    ,因此,当您仅切断前两位时,您无法再像您已经发现的那样区分这两个值。感谢您的快速回复!文本和数字始终位于同一位置,因此可以按照您的建议解决此问题。非常感谢!字母总是在s中吗ame在原始序列中的位置?因为所有这些都是ASCII码,所以您只需要8位中的7位,这意味着
    11
    10
    永远不能是缺少的正确前缀。而且,由于表示数字的二进制码总是以
    00
    开头,因此您需要
    00
    数字所在的位置和
    01
    数字所在的位置字母应该是。如果输入字符串可以是在任何位置由数字和字母组成的任何字符串,则您尝试执行的操作是不可能的。例如,以字节表示的
    “1”
    00110001
    “q”
    0111001
    ,因此,当您仅切断前两位时,您将无法再像您已经发现的那样区分这两个值。感谢您的快速回复!文本和数字始终位于同一位置,因此可以按照您的建议解决此问题。非常感谢!