@Nullable public static java.lang.String toUtf8String(OtpErlangBitstr bitstr) { if (bitstr.pad_bits() > 0) return null; try { return Charset.availableCharsets().get("UTF-8").newDecoder().decode(ByteBuffer.wrap(bitstr.binaryValue())).toString(); } catch (CharacterCodingException e) { return null; } }
@NotNull private static String toString(@NotNull OtpErlangBitstr quoted) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append('"'); for (byte element : quoted.binaryValue()) { if (element == 0x0A) { stringBuilder.append("\\n"); } else if (isAsciiPrintable((char) element)) { stringBuilder.append((char) element); } else { stringBuilder.append(String.format("\\x%02X", element)); } } stringBuilder.append('"'); return stringBuilder.toString(); }
private static void renderBitstr(OtpErlangBitstr bitstr, XValueTextRenderer renderer) { java.lang.String utf8String = toUtf8String(bitstr); if (utf8String != null) { renderer.renderStringValue(utf8String); } else { renderer.renderSpecialSymbol("<<"); boolean first = true; for (byte b : bitstr.binaryValue()) { if (!first) renderer.renderSpecialSymbol(", "); renderer.renderValue("" + ((int) b & 0xFF)); first = false; } if (bitstr.pad_bits() > 0) { renderer.renderSpecialSymbol("::size(" + (8 - bitstr.pad_bits()) + ")"); } renderer.renderSpecialSymbol(">>"); } }