将字节行转换为字符串

时间:2015-10-02 23:10:04

标签: java string byte

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

我现在正在创建第二个程序,我希望能够将该行字节作为用户输入粘贴到其中,然后让它以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();
         }
    }

我尝试将字节行连接成一个String,就像这个

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

但那(可能显然)没有用。

我需要做什么?

3 个答案:

答案 0 :(得分:1)

试试

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

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

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

解决方案B使用seperatore(文件es.EOT(char)5中不存在。

如果解决方案A要解读输入(也作为字符串),那么你将3个字符循环3个字符,转换为整数 - >施放到char并且你得到了原始的char。

解决方案B,可能更简单,您可以在输入字符串上使用拆分功能

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

然后循环播放每个字符串

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

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

答案 1 :(得分:0)

也许你需要这个:

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)); 
}

答案 2 :(得分:0)

以下是我的意思

  1. 读取字节(保持2位数,HEX保持这个简单,换句话说,9输入为09)作为字符串
  2. 以空字符串(缓冲区)作为解密字符串开始。
  3. 在while循环中,简单地一次子串2个字符,并使用Byte.valueOf with radix 16作为转换器到byte并将其作为char添加到解密的String中。
  4. 希望这有帮助!