How to pad a binary with 0's?

The given solution will crash if template_name is longer than 16 characters; this may be fine, depending on where the name is coming from etc.

If crashing isn’t acceptable, than the string will need to be truncated. You can do both the padding and the truncating together with a little pattern matching:

<<padded_and_trimmed::bits-size(128), _::bits>> = <<template_name::binary, 0::128>>

This works by initially padding template_name with 16 bytes of zeros, then taking only the first 16 bytes of the remainder.

The truncation can also be done as part of a larger step, like your label_bin:

padded_name = <<template_name::binary, 0::128>>
label_bin =
      <<"TAG1", label_metadata.label_len::16, label_metadata.content_length::64, padded_name::bits-size(128), ...>>
2 Likes