public @system pure nothrow @nogc void swapByteOrder(T)(T[] array)
if([2, 4].canFind(T.sizeof))
Swap byte order of items in an array in place.
Parameters
T | Item type. Must be either 2 or 4 bytes long. |
array | Buffer with values to fix byte order of. |
public @system pure nothrow @nogc auto fixUTFByteOrder(ubyte[] array)
Convert byte order of an array encoded in UTF(8/16/32) to system endianness in place.
Uses the UTF byte-order-mark (BOM) to determine UTF encoding. If there is no BOM at the beginning of array, UTF-8 is assumed (this is compatible with ASCII). The BOM, if any, will be removed from the buffer.
If the encoding is determined to be UTF-16 or UTF-32 and there aren't enough bytes for the last code unit (i.e. if array.length is odd for UTF-16 or not divisible by 4 for UTF-32), the extra bytes (1 for UTF-16, 1-3 for UTF-32) are stripped.
Note that this function does not check if the array is a valid UTF string. It only works with the BOM and 1,2 or 4-byte items.
Parameters
array | The array with UTF-data. |
Returns
A struct with the following members:
ubyte[] array
A slice of the input array containing data in correct
byte order, without BOM and in case of UTF-16/UTF-32,
without stripped bytes, if any.
UTFEncoding encoding
Encoding of the result (UTF-8, UTF-16 or UTF-32)
std.system.Endian endian
Endianness of the original array.
uint bytesStripped
Number of bytes stripped from a UTF-16/UTF-32 array, if
any. This is non-zero only if array.length was not
divisible by 2 or 4 for UTF-16 and UTF-32, respectively.
Complexity
(BIGOH array.length)
A minimal library providing functionality for changing the endianness of data.
Enums
UTFEncoding | Unicode UTF encodings. |
Functions
swapByteOrder | Swap byte order of items in an array in place. | |
autofixUTFByteOrder | Convert byte order of an array encoded in UTF(8/16/32) to system endianness in place. |