2016-04-09 40 views
1

:Dolgu her bir altıgen basamaklı üreten bir sol-pad sıfır ile ikili bir dizi çalışır aşağıdaki kod olan 4 bit

int i = Integer.parseInt(input, 16); 
String binaryString = Integer.toBinaryString(i); 
String pad = String.format("%4s", Integer.toBinaryString(i)).replace(' ', '0'); 

giriş "1", doğru şekilde "0001" üretir Ancak, fazladan bir onaltılık basamak eklerseniz artık bir dolgu eklemez. Örneğin, "2F""101111" üretir, ancak ben 001011111 gibi 8 bit olmasını istiyorum.

Bunu nasıl düzeltebilirim?

+0

Ancak ikilide '2F' 6 bite (' 101111') sahiptir. Ne demek sadece 4 bit istiyorsun? Sadece 4 bite yazamazsın - burada bir dolgu yoktur. Lütfen asıl sorunun ne olduğunu açıklığa kavuşturun. – Bohemian

+0

Her Hex değerinin 4 bit uzunluğuna sahip olmasını istiyorum, bu nedenle 2 0010'dan beri, diğer 0'ın önünü istiyorum – F22lightning

+0

Soruğumu Bohemian'a bağladığınız için teşekkür ederim. – F22lightning

cevap

1

Senin sorunun 4 bir asgari genişliği belirtilen ettik, ama 2F böylece 6 karakter üretilir biti vardır.

yapabilirsiniz ya:

  • Biçim tek tek her bir altıgen basamaklı ve
  • dinamik biçim genişliğini olun sonuçları bitiştirmek - onaltılık basamak 4 kez sayı
  • kullanın bir dize dayalı yaklaşım
  • Eğer requireme yeniden ifade eğer başka
  • şey

basit bir dize tabanlı bir yaklaşımdır nt "her zaman 4 bitlik bir çoğul üretir". İşte

var bunu nasıl:

String pad = String.format("%32s", Integer.toBinaryString(i)).replace(' ', '0') 
    .replaceAll("^(0000)+", ""); 

fark benim için .replaceAll("^(0000)+", "") ekleyerek 32 karakter (maksimum bit bir int olabilir) ve bir seferde gelen sıfırları 4 kapalı kesilmiş olması çıkışını değişti olduğunu senin kodun.

Bu normal ifade "dizenin başında 1 veya daha fazla 0000 örneğiyle eşleşir" ve yedek terim boş, bu nedenle eşleşen her şey "silindi".

+0

Yaptıklarını görüyorum, bu iyi bir yaklaşımdı, teşekkürler. – F22lightning

+0

'String.format ("% 032s ", ...) kullanmak daha kolay değil ... replaceAll (...)?' String.format "% 0" anlamıyor mu? – bipll

+0

@bipll Bunu düşündüm, ama doktora baktığımda '0' doldurma bayrağı sadece sayısal türleri için kullanılabilir buldum :( – Bohemian