2016-04-10 19 views
1

Bir String'in her karakterini yeni bir ikili String'e dönüştürmek istiyorum.Metni java ikili dosyasına dönüştürme

girişli Exemple için
public static void main(String args[]) { 
    String MESSAGE = "%"; 
    String binaryResult = ""; 
    for (char c : MESSAGE.toCharArray()){ 
     binaryResult += Integer.toBinaryString((int) c); 
    } 
    System.err.println(binaryResult); 
} 

: "%", aşağıdaki çıktıyı almak: İşte benim yaptığım "100101" Benim sorunum "0" silinir lider olmasıdır ... istediğim sahip olmak: "0100101". Kimsenin fikirleri var mı?

+1

Lütfen daha açık - neden lider 0'a ihtiyacınız var? İkilik olarak, 01001, 1001'e eşdeğerdir. Programınız, ne zaman 0'lar eklediğimi belirleme konusunda nasıl olmalıdır? Her zaman 7 haneli mi olmalı? – nhouser9

+1

[bu] (http://stackoverflow.com/q/4421400/335858) aradığınız nedir? – dasblinkenlight

+0

Aslında hayır çünkü rakam sayısını belirtmek istemiyorum. Sadece bir tane varsa 0'a sahip olmak istiyorum. – Astrus

cevap

1

Gerçekten söylediğiniz şey "Bir karakterin ikili dize temsilini 7 haneye nasıl yerleştirebilirim"? Bunlarla

binaryResult += Integer.toBinaryString((int) c); 

:

String binString = Integer.toBinaryString((int) c); 
binaryResult += ("0000000" + binString).substring(binString.length()); 

Bu, yalnızca daha gerekiyorsa, o zaman "00000-0 's eklemek ... 7 bit karakter presumes

bu satırı değiştirin "istediğiniz dizgenin uzunluğuna (dolgu 0s ile) uydurun.

+0

Evet bu benim amacımdı! Kendimi netleştirmedim ... Ama "%" karakterinde binString varlığınız 6 değil 7 uzunluğunda olacak mı? – Astrus

+0

Demek istediğim, 7 bitlik bir MAX idi. Kodu deneyin ve sizin için çalışıp çalışmadığını görün. Bu alt dize çağrısı, bu durumda char 6'da BAŞLATMA diyor ... bu da dizede 7 karakterle sonuçlanıyor. – billjamesdev

+0

Tamam thank !! – Astrus

1

Varolan kodunuzda birkaç değişiklik öneririm. Çünkü, bir dizgeye, bir döngü içinde bitiştirdiğiniz için, bu, değişmez olduklarından, bir dizi yeni dize nesnelerinin oluşturulmasına neden olur. Sorun, StringBuilder'un kullanılmasıyla çözülebilir.

public static void main(String args[]) { 
    String MESSAGE = "%"; 
    StringBuilder binaryResult = new StringBuilder(); 
    for (char c : MESSAGE.toCharArray()) { 
     StringBuilder curValue = new StringBuilder(Integer.toBinaryString((int)c)); 

     // calculate padding 0 bits to fill to 8 bits 
     int paddingLength = 8 - curValue.length(); 
     char[] paddingArr = new char[paddingLength]; 
     Arrays.fill(paddingArr, '0'); 

     // insert padding bytes to the front 
     curValue.insert(0, paddingArr); 

     // add to stringbuilder for `MESSAGE` 
     binaryResult.append(curValue); 
    } 
    System.err.println(binaryResult.toString()); 
} 
+0

Herhangi bir nedenle, 8 bit veya 7 bit veya başka bir şey gerektiren şeyler ekleyecekseniz, değiştirmek zorunda kalacağınız "8" yi bulmak zor değil. :) –

+0

Yardımın için teşekkürler dostum :) – Astrus

İlgili konular