檢查了這一點:https://docs.oracle.com/javase/7/docs/api/java/lang/Byte.html#toString(byte)
的toString
公共靜態字符串的ToString(BYTE B)
返回表示指定byte的一個新String對象。基數 被假定爲10
參數:b - 的字節將被轉換返回:指定字節的字符串 表示
另請參見:Integer.toString(INT)
問題是,你將字符串轉換爲字節,但是你要去 並將該字節轉換爲字符串/字符(解釋爲基數爲10的數字 - radix = 10),這意味着您實際上獲得了ascii等效的每個字符(c = 99,o = 111,o = 111,l = 108),這是以10爲底的數字。然而,你是每個數字的數字字符。當你將字符串轉換回一個字節時,你會得到數字字符的字節,而不是像你想要的字母字節。
取決於你實際上是什麼後,你將需要找到一種不同的方法。目前還不清楚你想通過轉換爲字節來顯示什麼,但是如果你真的想轉換爲字符串(由0和1的數字字符組成的字符串),你必須做更多的工作。
如果您使用逗號等其他字符(例如99,111,111,108)來分隔字符串,那麼您可以假設分隔的子字符串是整數(用於常規ascii)並將它們傳遞給'Integer.parseInt(s)'或'Integer.valueOf(s)',然後進行轉換爲char,然後將字符串構建爲字符串。
例如:
StringBuilder sb = new StringBuilder();
String str = "99,111,111,108"; // result of initial conversion
String[] sa = str.split(",");
char ch = '';
for(String s : sa) {
ch = Integer.parseInt(s);
sb.append(ch);
}
FileOutputStream fos = new FileOutputStream("new.txt");
fos.write(sb.toString().getBytes());
fos.close();
這裏一個重要的注意的是,對Java至少,字符都只是剛剛整數他們一個char被解釋爲ASCII字符。
我認爲,將字節轉換爲字符串的基本困境是破壞性的操作,其中上下文丟失。即計算機不再知道原始字節的任何內容,只有新生成的字符串是什麼。字節是二進制數據,但字符串是一組字符(通常是ascii,但也是各種UTF)。
如果你創建這樣的字符串會怎麼樣:'String x = new String(data,「UTF-8」);'...你的程序的其餘部分是否按照你的想法行事? – dnault
不,是否有任何其他方式將字符串轉換回除getBytes()以外的字節? – Lui
@Lui - 你可以,但「99111111108」不是你的字符串 - 它是一個由表示字節爲小數的字符串。酷 - > [99] [111] [111] [108]。你需要把「酷」變成字節,而不是「99111111108」 – xpcoffee