misalnya untuk 1, 2, 128, 256
outputnya bisa (16 digit):
0000000000000001
0000000000000010
0000000010000000
0000000100000000
Saya mencoba
String.format("%16s", Integer.toBinaryString(1));
itu menempatkan spasi untuk bantalan kiri:
` 1'
Bagaimana menempatkan 0
s untuk bantalan. Saya tidak bisa menemukannya di Formatter . Apakah ada cara lain untuk melakukannya?
PS posting ini menjelaskan bagaimana memformat bilangan bulat dengan kiri 0-padding, tetapi bukan untuk representasi biner.
java
binary
string-formatting
khachik
sumber
sumber
%016s
?Exception in thread "main" java.util.FormatFlagsConversionMismatchException: Conversion = s, Flags = 0
Jawaban:
Saya pikir ini adalah solusi suboptimal, tetapi Anda bisa melakukannya
sumber
Returns a string representation of the integer argument as an unsigned integer in base 2.
Tidak ada konversi biner yang dibangun ke dalam java.util.Formatter, saya akan menyarankan Anda untuk menggunakan String.replace untuk mengganti karakter spasi dengan nol, seperti di:
Atau terapkan logika Anda sendiri untuk mengonversi bilangan bulat menjadi representasi biner dengan menambahkan padding kiri di suatu tempat di sepanjang garis yang diberikan dalam hal ini . Atau jika Anda benar-benar perlu meneruskan angka ke format, Anda dapat mengonversi representasi biner Anda ke BigInteger dan kemudian memformatnya dengan nol di depan, tetapi ini sangat mahal pada waktu proses, seperti di:
sumber
Anda dapat menggunakan Apache Commons StringUtils . Ini menawarkan metode untuk padding string:
sumber
Saya mencoba semua jenis pemanggilan metode yang belum pernah saya gunakan sebelumnya untuk membuat ini berhasil, mereka bekerja dengan kesuksesan sedang, sampai saya memikirkan sesuatu yang sangat sederhana sehingga mungkin berhasil, dan berhasil!
Saya yakin itu telah dipikirkan sebelumnya, tidak yakin apakah itu bagus untuk string kode biner yang panjang tetapi berfungsi dengan baik untuk string 16Bit. Semoga membantu !! (Perhatikan bagian kode kedua ditingkatkan)
Terima kasih kepada Will yang telah membantu meningkatkan jawaban ini agar berhasil tanpa satu putaran. Ini mungkin sedikit kikuk tetapi berhasil, harap tingkatkan dan beri komentar kembali jika Anda bisa ....
sumber
binString.length()
dan 16 untuk membuat string dan kemudian menambahkan string itu ke binString daripada mengulang meskipun dengan sesuatu seperti ini jawaban: stackoverflow.com/a/2804866/1353098Berikut jawaban baru untuk posting lama.
Untuk memasukkan nilai biner dengan angka nol di depan ke panjang tertentu, coba ini:
Jika
len = 4
danval = 1
,mengembalikan string
"10001"
, lalumembuang karakter pertama. Jadi kami mendapatkan apa yang kami inginkan:
Jika
val
cenderung negatif, coba:sumber
Versi sederhana dari ide user3608934 "Ini adalah trik lama, buat string dengan 16 0 lalu tambahkan string biner terpangkas yang Anda dapatkan":
sumber
Saya tidak tahu solusi yang "tepat" tetapi saya dapat menyarankan Anda untuk melakukan patch cepat.
Saya baru saja mencobanya dan ternyata berfungsi dengan baik.
sumber
%32s
?mencoba...
Saya rasa ini bukan cara yang "benar" untuk melakukan ini ... tetapi berhasil :)
sumber
0000001111111111
untuk nilai masukan1023
Setiap nilai yang lebih besar dari itu akan menghasilkan output daritoBinaryString(1024)
dari10000000000
yang terlalu besar untukparseInt(...)
Jadi, input hanya bekerja untuk 1K dari 64K kemungkinan nilai inputSolusi naif yang akan berhasil
Salah satu metode lainnya adalah
Ini akan menghasilkan string 16 bit dari integer 5
sumber
Dimulai dengan Java 11, Anda dapat menggunakan metode repeat (...) :
Atau, jika Anda memerlukan representasi 32-bit dari bilangan bulat apa pun:
sumber
Ini adalah trik lama, buat string dengan 16 0 lalu tambahkan string biner terpangkas yang Anda dapatkan dari String.format ("% s", Integer.toBinaryString (1)) dan gunakan 16 karakter paling kanan, potong semua karakter utama 0. Lebih baik lagi, buat fungsi yang memungkinkan Anda menentukan berapa panjang string biner yang Anda inginkan. Tentu saja mungkin ada banyak cara lain untuk melakukannya termasuk perpustakaan, tetapi saya menambahkan posting ini untuk membantu teman :)
sumber
Saya akan menulis kelas util saya sendiri dengan metode seperti di bawah ini
}
Keluaran:
Pendekatan yang sama dapat diterapkan pada semua tipe integral. Perhatikan jenis topengnya
long mask = 1L << i;
sumber
Metode ini mengubah int menjadi String, length = bits. Entah diisi dengan 0 atau dengan bit paling signifikan terpotong.
sumber
Anda dapat menggunakan lib https://github.com/kssource/BitSequence . Ini menerima nomor dan mengembalikan string bynary, empuk dan / atau dikelompokkan.
sumber
str[i].length()
adalah panjang angka katakanlah 2 dalam biner adalah 01 yaitu panjang 2 ubah 4 menjadi panjang maksimal angka yang diinginkan. Ini dapat dioptimalkan ke O (n). dengan menggunakan lanjutkan.sumber
// Di bawah ini akan menangani ukuran yang sesuai
sumber
sumber
numB
dannum
sama dan tidak berbeda dengan cara apa pun