Current implementation byte swaps while reading the native
type, then byte swaps to convert to network order for inet_ntop
on little endian targets.
For big endian address spaces, this could would produce
incorrect results, as the native type would be in network byte
order, causing the struct.pack to mess up the IP address.
This aligns the conversion like it's done for IPv6 addresses.
Now String.v() returns a character array of length (as specified in
the constructor) or NoneObject if the object could not be read.
str(String) returns a string with encoding errors replaced by '?'
and unicode(String) returns a unicode string with encoding errors
replaced by '\ufffd'.
_UNICODE_STRING.v() returns a unicode string or NoneObject if the buffer
length is invalid. str(_UNICODE_STRING) and unicode(_UNICODE_STRING)
behave like str(String) and unicode(String) except that if there is a
problem with the buffer length or dereferencing the buffer a warning
will be issued. If the warning can safely be ignored use
str(_UNICODE_STRING or '') or unicode(_UNICODE_STRING or '').