Java 16進数文字列から、2文字ずつ切り取って byte[] を作る。
必ず2文字ずつ切り出せる文字列であるとする。=すなわち長さが2で割り切れる。
String hexstring= "56d19eaf";
クラシックな方法
Matcher m = Pattern.compile("[\\w]{1,2}").matcher(hexstring); while(m.find()){ // TODO m.group() からbyte[] に格納する }
Java9 以降の Stream
Pattern.compile("[\\w]{1,2}").matcher(hexstring).results().forEach(r->{ // TODO r.group() から byte[] に格納する });
Java9 以降の Stream で、Google guava のプリミティブを使って
List<Byte> listb = Pattern.compile("[\\w]{1,2}").matcher(hexstring) .results().map(r->(byte)Integer.parseInt(r.group(), 16)) .collect(Collectors.toList()); byte[] ary = Bytes.toArray(listb);
Google guava は、Google guice を使用するなら依存関係で参照できる。
また、元の文字列に復元するには、、
String s = IntStream.range(0, ary.length).mapToObj(i->String.format("%02x", ary[i])).collect(Collectors.joining(""));
(参考)
http://oboe2uran.hatenablog.com/entry/2017/07/22/000044