取り急ぎ備忘録として書いておく。おそらくコード例はおかしな点があると思うので後で直す。
byte[]をlongに変換
ByteBufferを利用する[1]のが簡単。
まずByteBuffer.wrap()
にbyte[]
を渡して、ByteBuffer
インスタンスを生成する。
その後、生成したインスタンスのgetLong()
メソッドを使って、long
値を得る。
byte[] bytes = /* 何らかのバイト配列 */ ByteBuffer buffer = ByteBuffer.wrap(bytes); long l = buffer.getLong();
byte[]を分割
Arrays.copyOfRange()
が使える[2]。
以下はbyte[16]
の0から7バイト目までを取り出す例。
byte[16] bytes = /* 何らかのバイト配列 */ byte[] splited = Arrays.copyOfRange(bytes, 0, 8); // 0~7バイト目を取り出す
longをバイナリ(2進数表記)で表示
Long.toBinaryString()
を使う[3]。
ちなみにintをバイナリ表示したいならInteger.toBinaryString()
があるらしい[3][4]。
以下は適当なlong値をバイナリ表示する例。
long l = 10000L; String l_binary = Long.toBinaryString(l); // lをバイナリ表示した文字列ができる System.out.println(l_binary);
バイナリ文字列を0埋め
String.format()
とString.replace()
を用いる[5]。
以下はバイナリ文字列"101100"を8桁まで0埋めする、つまり"00101100"にする例。
String binary = "101100"; // まずString.format()で8桁になるように空白埋めする String binary8 = String.format("%8s", binary); // " 101100" // その後空白を"0"に置換する String binary8padded = binary8.replace(" ", "0"); // "00101100"
参考リンク
[1] https://qiita.com/nwtgck/items/c53db76e19ef80296a71
[2] https://www.webdevqa.jp.net/ja/java/%E3%83%90%E3%82%A4%E3%83%88%E9%85%8D%E5%88%97%E3%81%AE%E5%88%86%E5%89%B2/968411348/
[3] https://www.baeldung.com/java-print-integer-binary
[4] https://qiita.com/Qui/items/2773bdce647cf987d5d4
[5] https://blog.beatdjam.com/entry/2017/07/21/225053