日記

日本語の勉強のためのブログ

【Java】byte[]について ほか

取り急ぎ備忘録として書いておく。おそらくコード例はおかしな点があると思うので後で直す。

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