Kontrol şuna: https://docs.oracle.com/javase/7/docs/api/java/lang/Byte.html#toString(byte)
toString
kamu statik dize toString (bayt b)
belirtilen byte temsil eden yeni bir String nesnesi döndürür. sayı tabanı 10.
Parametreler olduğu varsayılır: b - bayt İade dönüştürülecek:
Ayrıca Bkz belirtilen bayt dize temsil: Integer.toString (int)
Sorun, dizeyi byte'lara dönüştürmenizdir, ancak 'a gidip bu baytı bir dize/karaktere dönüştürmek (temel 10 sayı - radix = 10 olarak yorumlanır), bu ascii eşdeğerini almanız anlamına gelir. Her bir karakterden (c = 99, o = 111, o = 111, l = 108) 10 numaralı bir sayıdır. her rakam için sayısal karakter. Dizeyi tekrar bir bayta dönüştürdüğünüzde, sayısal karakter için numaralı bayt için istediğiniz gibi bir bayt için byte alamazsınız.
Aslında neye göre olduğuna bağlı olarak, farklı bir yaklaşım bulmanız gerekecek. Bu, baytlara dönüştürerek göstermeye çalıştığınız net değil, ama gerçekten bir bit-string'e (0s ve 1s için sayısal karakterlerden oluşan bir dize) dönüştürmek istiyorsanız, daha fazla iş yapmanız gerekecektir.
Bir virgül gibi başka bir karakterle oluşturduğunuz dizgiyi (örn. 99,111,111,108) sınırladıysanız, sınırlandırılmış alt dizelerin tamsayılar olduğunu (normal ascii için) varsayabilir ve bunları 'Integer.parseInt (s)' olarak iletebilirsiniz. veya 'Integer.valueOf (s)' ve sonra char için bir dönüşüm yapın ve daha sonra karakterleri bir dizeye oluşturun. Örneğin
:
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();
burada önemli bir not Java için en azından karakter bir karakter bir ascii karakter olarak yorumlanır onlar dışında sadece tam sayılardır, olmasıdır.
Temel ikilem, baytların dizelere dönüştürülmesinin bağlamın kaybolduğu bir yıkıcı işlemidir. Yani Bilgisayar artık orijinal baytlarla ilgili hiçbir şey bilmiyor, sadece yeni oluşturulan dizenin ne olduğunu biliyor. Baytlar ikili veridir, ancak dizeler bir grup karakterdir (genellikle ascii, ancak çeşitli türlerde UTF).
Bu dizeyi şu şekilde oluşturursanız: 'String x = new String (veri," UTF-8 ");' ... programınızın geri kalanı nasıl istediğinizi gösterir mi? – dnault
Hayır, dizeyi getBytes() dışındaki baytlara dönüştürmenin başka bir yolu var mı? – Lui
@Lui - yapabilirsiniz, ancak "99111111108" dizginiz değil - ondalık olarak baytları temsil eden bir dizedir. cool -> [99] [111] [111] [108]. "cool" ı tekrar "bayt" a çevirmeniz gerekiyor, "99111111108" – xpcoffee