byte配列の値を確認する
・他システムとの連携でbyte配列でデータを受信し、受信した値をHexDecimalとDecimalで出力して確認したい場合
【例】各1バイトに数値が設定されていて、3バイトで西暦の「yyMMdd」を表現している場合
(2018年10月31日)の場合「181031」がbyte配列として以下のようになっているはず
2進 | 16進 | 10進 |
---|---|---|
0001_0010 | 12 | 18 |
0000_1010 | 0A | 10 |
0001_1111 | 1F | 31 |
- 各バイトを、HexDecimalとDecimalに変換して出力
JavaSE8でのStreamクラスを使って実装したかったのですが、Stream
byte[] bytes = {0b0001_0010, 0b0000_1010, 0b0001_1111}; StringBuilder sb1 = new StringBuilder(); StringBuilder sb2 = new StringBuilder(); for (byte b : bytes) { String val = String.format("%02X", b); // HexDecimal sb1.append(val); int i = Integer.parseUnsignedInt(val, 16); // Decimal sb2.append(i); } System.out.println(String.format("HexDecimal:%s", sb1.toString())); System.out.println(String.format(" Decimal:%s", sb2.toString())); }
実行結果
HexDecimal:120A1F Decimal:181031
// JDK8 Stream<Integer> si = Stream.of(1,2); Stream<Byte> sb = Stream.of(0b0000_0001, 0b0000_0002); // <-ここでコンパイルエラー
エラーのメッセージがなんだかわかりにくいです、、、
Java難しいです、、、
追記(上記実装で2進数なのに2としていたのを修正、汗、、、)
Stream<Integer> si = Stream.of(1,2); Stream<Byte> sb = Stream.of(0b0000_0001, 0b0000_0010);
追記2
@smogamiさんからbyteにキャストすればいいと教えていただいたので、早速実装修正
コンパイルエラーが解決できました!ありがとうございます!!!
Stream<Byte> sb = Stream.of((byte)0b0000_0001, (byte)0b0000_0010); String HexDecimalVal = sb.map(b -> String.format("%02X", b)).collect(Collectors.joining()); System.out.println(HexDecimalVal);
実行結果
0102
Java実装、楽しいです。