Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串到字节到字符串_Java_String_Bytearray_Byte - Fatal编程技术网

Java 字符串到字节到字符串

Java 字符串到字节到字符串,java,string,bytearray,byte,Java,String,Bytearray,Byte,问题在代码中的注释中,我认为这是一种更简单的提问方式 这个问题很简单,但我似乎找不到答案。我想将字符串转换为它的byte[](很简单,String.getBytes())。然后我想将一个字节字符串(1010110101001例如)转换为一个字节[],并获取该字节的字符串值(这也很简单:新字符串(字节[])) 以下是到目前为止我得到的信息: Scanner scan = new Scanner(System.in); String string = scan.nextLine(); String

问题在代码中的注释中,我认为这是一种更简单的提问方式

这个问题很简单,但我似乎找不到答案。我想将字符串转换为它的
byte[]
(很简单,
String.getBytes()
)。然后我想将一个字节字符串(
1010110101001
例如)转换为一个字节[],并获取该字节的字符串值(这也很简单:
新字符串(字节[])

以下是到目前为止我得到的信息:

Scanner scan = new Scanner(System.in);
String string = scan.nextLine();
String byteString = "";
for (byte b : string.getBytes()) {
  byteString += b;
}
System.out.println(byteString);

//This isn't exactly how it works, these two parts in separate methods, but you get the idea...

String byteString = scan.nextLine();
byte[] bytes = byteString.literalToBytes() //<== or something like that...
//The line above is pretty much all I need...
String string = new String(bytes);
System.out.println(string);
Scanner scan=新的扫描仪(System.in);
String String=scan.nextLine();
字符串byteString=“”;
for(字节b:string.getBytes()){
byteString+=b;
}
System.out.println(byteString);
//这并不完全是它的工作原理,这两个部分在不同的方法中,但你得到的想法。。。
String byteString=scan.nextLine();
byte[]bytes=byteString.literalToBytes()//编辑

请参阅答案以获取解决方案

有了它,您可以:

String string = scan.nextLine();
String convertByte = convertByte(string.getBytes());
System.out.println(convertByte);
String byteString = scan.nextLine();
System.out.println(new String(convertStr(byteString)));

这行不通。问题是,当您将字节转换为字符串时,您将得到如下字符串

2532611134

那么分析这个字符串,第一个字节是2,还是25,还是253


唯一可行的方法是使用十进制格式,并确保字符串中的每个字节都有3个字符长

// to get back the string from byte array
StringBuilder byteString = new StringBuilder();
for (byte b : string.getBytes()) {
    byteString.append((char)b);
}
   System.out.println(byteString.toString());
// to get the binary representation from string
StringBuilder byteString = new StringBuilder();
    for (byte b : string.getBytes()) {
        System.out.print(Integer.toBinaryString((int)b));
    }
        System.out.println(byteString.toString());
好吧,因为who to(引导我找到的人)不会回答,所以我将在这里发布解决方案:

Scanner scan = new Scanner(System.in);
String pass = scan.nextLine();
StringBuilder byteString = new StringBuilder();
for (byte b : pass.getBytes()) {
  b = (byte) (b);
  byteString.append(b).append(","); //appending that comma is what does the trick.
}
System.out.println(byteString);
//
String[] split = byteString.toString().split(","); //splitting by that comma is what does the trick... too...
byte[] bytes = new byte[split.length];
for (int i = 0; i < split.length; i++) {
  bytes[i] = (byte) (Byte.valueOf(split[i]).byteValue());
}
System.out.println(new String(bytes));
Scanner scan=新的扫描仪(System.in);
String pass=scan.nextLine();
StringBuilder byteString=新的StringBuilder();
for(字节b:pass.getBytes()){
b=(字节)(b);
byteString.append(b.append(“,”)//添加逗号就是其中的诀窍。
}
System.out.println(byteString);
//
String[]split=byteString.toString().split(“,”)//用逗号分开是什么把戏。。。也
字节[]字节=新字节[split.length];
对于(int i=0;i
选中此项,我将对其进行编辑,使其更加清晰,但如果您在代码中看到我的命令,首先我建议您使用StringBUilder作为变量byteString,然后在循环后将其转换回字符串。小优化:)@StepTNT,这让我找到了正确的答案。如果你想把答案形式化,我会接受的。谢谢,没必要那样。接受你的,我只是给了你一个链接,根本没有回答:)对不起,这对我正在处理的案例不起作用。我只是用字符串
kent
尝试了一下,它给了我一个字节字符串:
107101110116
。在给出答案时,字节字符串会在
Integer.tobinarysting(Integer.parseInt(string))上抛出NumberFormatException这很有意义。但我问题的一位评论者给了我一个好答案的链接。如果他们没有在回答中发表评论,我就发表我的回答。不过谢谢你的帮助。我不只是想复制解决方案,而是添加了一个指向它的链接。这与新字符串(String.getBytes())相同。它不会打印字符串的二进制表示形式。@morja,没错。我需要它打印字节表示,然后将字节表示的字符串版本转换回它最初表示的字符串。不过,有人在评论中回答了这个问题。我只是在等待一个正式的答案,这样我就可以接受了。太棒了,现在来回答最初的问题。如何将该字节字符串转换回它所表示的原始字符串?我已经得到了答案,但如果您愿意,可以随时更新您的答案。您必须将byteString子串为长度为8的片段,并分别将它们解析为int,然后将typecaste转换为字节,然后将typecaset转换为char。另一个选项是转换为十六进制(每个字节2位0-F)或在字节之间使用分隔符,例如,空格字符。