有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将字节行转换为字符串

我创建了一个接受用户输入并将其转换为字符数组的程序。然后,它将数组中的每个字符转换为相应的字节值,并在一行中打印所有字符

我现在正在创建第二个程序,我希望能够将这行字节粘贴到其中作为用户输入,然后让它以ASCII(英语)显示原始消息

以下是我目前的代码:

    import java.util.Scanner;


    public class MessageDecoder
    {
         public static void main(String[] args)
         {
              System.out.println("Please enter your encrypted message and press Enter: ");
              Scanner reader = new Scanner(System.in);
              byte b = reader.nextByte();
         }
    }

我尝试将字节行连接成字符串,如下所示

    System.out.println(b + "");

但这(可能很明显)不起作用

我需要做什么


共 (3) 个答案

  1. # 1 楼答案

    试试看

      System.out.println((char)b);
    

    然而,从你的评论中,据我所知,你已经用数字“加密了你的字符”,因此A变成了65(2字节6和5)。“解密”的问题是,您丢失了有关加密的信息。AA=6565(这也可以是字符6字符5 ecc)。因此,您需要的是一个系统来理解它是如何分组的

    解决方案A设置为fixed(至少3个字符,因为字节最大值为256),这意味着A变为065

    解决方案B使用文件es.EOT(char)5中不存在的单独的ORE

    如果解决方案A使您读取输入(也作为字符串),那么您将以3个字符循环3个字符,转换为整数>;转换成字符,你就得到了你原来的字符

    解决方案B可能更简单,您可以对输入字符串使用split函数

      String[] stringArray = input.split(char)5);
    

    然后在每个字符串上循环这个和

        int result = Integer.parseInt(stringArray[i]).
        char c = (char)result;
    

    我没有给你所有的代码,但我希望它能帮助你

  2. # 2 楼答案

    也许你需要这个:

    System.out.println("Please enter your encrypted message and press Enter: ");
    Scanner reader = new Scanner(System.in);
    String val = reader.nextLine();
    char[] buffer = val.toCharArray();
    byte[] b = new byte[buffer.length];
    for (int i = 0; i < b.length; i++) {
       System.out.println(Integer.toBinaryString((byte) buffer[i] & 255 | 256).substring(1)); 
    }
    
  3. # 3 楼答案

    我会这样做的

    1. 读取字节(保留两位数字,十六进制以保持简单,换句话说,9作为09输入)作为字符串
    2. 以空字符串(缓冲区)作为解密字符串开始
    3. 在while循环中,只需一次将2个字符作为子字符串,并使用Byte.valueOf with radix 16作为字节的转换器,然后将其作为字符附加到解密的字符串中

    希望这有帮助