Java 16進数文字列から、byte[]

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

http://oboe2uran.hatenablog.com/entry/2017/10/07/174948

http://oboe2uran.hatenablog.com/entry/2018/08/03/094849