2012-08-03 13 views
5

Int değerlerini ikili dizelere dönüştürüp bunları sakladığım bir yöntem yazıyorum. Bunu yapmak için Integer.toBinaryString yöntemini kullanıyorum ve doğru şekilde çalışıyor, ancak sorun daha az yerine dize tam olarak 4 bit döndürmek için yönteme ihtiyacım var (sayıları yeterince büyük değil çünkü daha fazla olmayacak). olması gerekenden gibiInteger.toBinaryString nasıl yapılır En az 4 bit döndürür

int value5 = 3; 
String strValue5 = Integer.toBinaryString(value5); 
for(int index = 0; index < 4; index++){ 
    sBoxPostPass[4][index] = strVal5.charAt(index); 
} 

Açıkçası, bu, bir ArrayOutOfBoundsException çünkü strValue5 == 11 değil 0011 atacağım: İşte benim kod ve sorunun oluşmasını bir örnektir. Umarım bu yeterince açıktır. Yardım için şimdiden teşekkür ederiz.

+0

Genel olarak sonucu alıyorum, ön tarafa bir kaç fazla sıfır ekleyin, sonra istenen uzunluk için "kuyruk" u alın. Hesaplama gerektirmez. –

+0

İyi çağrı - Bunu –

+1

http://stackoverflow.com/questions/4421400/how-to-get-0-padded-binary-representation-of-an-integer-in-java yapacağım – MacAnthony

cevap

1

Değeriniz her zaman tam olarak 4 bite sahipse, söz konusu 16 değer için bir arama tablosu kullanacak kadar küçüktür. Java'mdaki herhangi bir hatayı düzeltmek okuyucu için bir egzersiz olarak kalıyor.

static String binary4[16] = {"0000", /* another exercise for the reader */, "1111"}; 
static String toBinary4(int value) { 
    return binary4[value & 0xF]; 
} 
2

Bu en etkili yöntemdir garanti değilim, ama her zaman Integer.toBinaryString ve biçimleri uygun olarak adlandırdığı kendi yöntemini yapabilirsiniz: Unutmayın

public static String toBinaryStringOfLength(int value, int length) { 
    String binaryString = Integer.toBinaryString(value); 
    StringBuilder leadingZeroes = new StringBuilder(); 
    for(int index = 0; index < length - binaryString.length(); index++) { 
     leadingZeroes = leadingZeroes.append("0"); 
    } 

    return leadingZeroes + binaryString; 
} 

ben değil' t Gönderdiğiniz değerin, sağladığınız uzunluktan daha ikili olarak gösterilecek daha fazla bit gerektirdiği durumu dikkate alın.

4

En az 4 basamak döndüren bir numara 5 basamaklı bir sayıya sahiptir ve ilk basamağı keser.

String strValue5 = Integer.toBinaryString(value5 + 0b10000).substring(1); 
İlgili konular