conversions.endianness¶
Endianness Conversion Algorithm
This module implements endianness (byte order) conversion utilities for converting between big-endian and little-endian representations of multi-byte integers.
Endianness refers to the order of bytes in a multi-byte data type: - Big-endian: Most significant byte first (e.g., 0x12345678 → [0x12, 0x34, 0x56, 0x78]) - Little-endian: Least significant byte first
(e.g., 0x12345678 → [0x78, 0x56, 0x34, 0x12])
Common uses: - Network protocols (TCP/IP uses big-endian for multi-byte fields) - File format parsing (PNG, JPEG headers specify endianness) - Cryptographic algorithms (MD5 uses little-endian, SHA-256 uses big-endian) - Binary data serialization (Protocol Buffers, MessagePack) - Hardware interfacing (ARM is bi-endian, x86 is strictly little-endian) - Cross-platform data exchange
Real-world examples: - IP addresses are transmitted in big-endian (network byte order) - Modern ARM and x86 processors typically operate in little-endian mode - Java class files use big-endian format - Bitcoin uses little-endian for block hashes - USB and PCI protocols use little-endian
References: - https://en.wikipedia.org/wiki/Endianness - RFC 1700 (Network Byte Order) - https://tools.ietf.org/html/rfc1700
Attributes¶
Functions¶
|
Convert bytes to integer using big-endian byte order. |
|
Convert bytes to integer using little-endian byte order. |
|
Convert integer to bytes using big-endian byte order. |
|
Convert integer to bytes using little-endian byte order. |
|
Swap the byte order of a 16-bit integer. |
|
Swap the byte order of a 32-bit integer. |
|
Swap the byte order of a 64-bit integer. |
Module Contents¶
- conversions.endianness.bytes_to_int_big(data: bytes) int¶
Convert bytes to integer using big-endian byte order.
- Args:
data: Byte sequence to convert (1-8 bytes)
- Returns:
Integer representation in big-endian order
- Raises:
TypeError: If data is not bytes ValueError: If data is empty or exceeds 8 bytes
>>> bytes_to_int_big(b'\x12\x34\x56\x78') 305419896
>>> hex(bytes_to_int_big(b'\x12\x34\x56\x78')) '0x12345678'
>>> bytes_to_int_big(b'\x01\x02') 258
>>> bytes_to_int_big(b'\xff') 255
>>> bytes_to_int_big(b'\x00\x00\x00\x01') 1
- conversions.endianness.bytes_to_int_little(data: bytes) int¶
Convert bytes to integer using little-endian byte order.
- Args:
data: Byte sequence to convert (1-8 bytes)
- Returns:
Integer representation in little-endian order
- Raises:
TypeError: If data is not bytes ValueError: If data is empty or exceeds 8 bytes
>>> bytes_to_int_little(b'\x78\x56\x34\x12') 305419896
>>> hex(bytes_to_int_little(b'\x78\x56\x34\x12')) '0x12345678'
>>> bytes_to_int_little(b'\x01\x02') 513
>>> bytes_to_int_little(b'\xff') 255
>>> bytes_to_int_little(b'\x00\x00\x00\x01') 16777216
- conversions.endianness.int_to_bytes_big(value: int, num_bytes: int) bytes¶
Convert integer to bytes using big-endian byte order.
- Args:
value: Integer to convert (non-negative) num_bytes: Number of bytes in output (1-8)
- Returns:
Bytes representation in big-endian order
- Raises:
ValueError: If value is negative, num_bytes invalid, or value too large
>>> int_to_bytes_big(0x12345678, 4) b'\x124Vx'
>>> int_to_bytes_big(258, 2) b'\x01\x02'
>>> int_to_bytes_big(255, 1) b'\xff'
>>> int_to_bytes_big(1, 4) b'\x00\x00\x00\x01'
- conversions.endianness.int_to_bytes_little(value: int, num_bytes: int) bytes¶
Convert integer to bytes using little-endian byte order.
- Args:
value: Integer to convert (non-negative) num_bytes: Number of bytes in output (1-8)
- Returns:
Bytes representation in little-endian order
- Raises:
ValueError: If value is negative, num_bytes invalid, or value too large
>>> int_to_bytes_little(0x12345678, 4) b'xV4\x12'
>>> int_to_bytes_little(513, 2) b'\x01\x02'
>>> int_to_bytes_little(255, 1) b'\xff'
>>> int_to_bytes_little(16777216, 4) b'\x00\x00\x00\x01'
- conversions.endianness.swap_endianness_16(value: int) int¶
Swap the byte order of a 16-bit integer.
- Args:
value: 16-bit integer (0 to 65,535)
- Returns:
Integer with swapped byte order
- Raises:
ValueError: If value is negative or exceeds 16-bit range
>>> swap_endianness_16(0x1234) 13330
>>> hex(swap_endianness_16(0x1234)) '0x3412'
>>> swap_endianness_16(0xABCD) 52651
>>> hex(swap_endianness_16(0xABCD)) '0xcdab'
>>> swap_endianness_16(0) 0
>>> swap_endianness_16(0xFFFF) 65535
- conversions.endianness.swap_endianness_32(value: int) int¶
Swap the byte order of a 32-bit integer.
- Args:
value: 32-bit integer (0 to 4,294,967,295)
- Returns:
Integer with swapped byte order
- Raises:
ValueError: If value is negative or exceeds 32-bit range
>>> swap_endianness_32(0x12345678) 2018915346
>>> hex(swap_endianness_32(0x12345678)) '0x78563412'
>>> swap_endianness_32(0xDEADBEEF) 4022250974
>>> hex(swap_endianness_32(0xDEADBEEF)) '0xefbeadde'
>>> swap_endianness_32(0) 0
>>> swap_endianness_32(0xFFFFFFFF) 4294967295
>>> swap_endianness_32(0x01020304) 67305985
- conversions.endianness.swap_endianness_64(value: int) int¶
Swap the byte order of a 64-bit integer.
- Args:
value: 64-bit integer (0 to 18,446,744,073,709,551,615)
- Returns:
Integer with swapped byte order
- Raises:
ValueError: If value is negative or exceeds 64-bit range
>>> swap_endianness_64(0x0123456789ABCDEF) 17279655951921914625
>>> hex(swap_endianness_64(0x0123456789ABCDEF)) '0xefcdab8967452301'
>>> swap_endianness_64(0xFEDCBA9876543210) 1167088121787636990
>>> hex(swap_endianness_64(0xFEDCBA9876543210)) '0x1032547698badcfe'
>>> swap_endianness_64(0) 0
>>> swap_endianness_64(0xFFFFFFFFFFFFFFFF) 18446744073709551615
- conversions.endianness._¶