YAML has the ability to express hex-values, which are then decoded as numbers. However, when you want to dump a YAML document, strings will be quoted and numbers will be decimals. In order to write actual hex-values, you need to wrap your value in another type and then tell the YAML encoder how to handle it.
This is specifically possible with the ruamel YAML encoder (pypi).
An example of how to do this:
import sys import ruamel.yaml class HexInt(int): pass def representer(dumper, data): return \ ruamel.yaml.ScalarNode( 'tag:yaml.org,2002:int', '0x{:04x}'.format(data)) ruamel.yaml.add_representer(HexInt, representer) data = { 'item1': { 'string_value': 'some_string', 'hex_value': HexInt(641), } } ruamel.yaml.dump(data, sys.stdout, default_flow_style=False)
Output:
item1: hex_value: 0x0281 string_value: some_string
Please note that I require that my hex-values are two bytes and padded with zeroes, so the example above will print four characters (plus the prefix): 0x{:04x} . If this doesn’t work for you, change it to whatever you require.
Thanks to this post.