View Source ExDicom.Parser.BigEndianParser (EX_DICOM v0.1.0)
Provides functions for parsing different numeric types from a big-endian binary. All functions handle bounds checking and proper binary validation.
Summary
Functions
Parses a 64-bit float from a big-endian binary.
Parses a 32-bit float from a big-endian binary.
Parses a signed 16-bit integer from a big-endian binary.
Parses a signed 32-bit integer from a big-endian binary.
Parses an unsigned 16-bit integer from a big-endian binary.
Parses an unsigned 32-bit integer from a big-endian binary.
Types
@type byte_array() :: binary()
A binary string containing bytes to parse
@type position() :: non_neg_integer()
Position in the binary to start parsing from
Functions
@spec read_double(byte_array(), position()) :: {:ok, float()} | {:error, String.t()}
Parses a 64-bit float from a big-endian binary.
Parameters
- byte_array - The binary to parse from
- position - The position to start parsing from
Returns
{:ok, float}
- The parsed 64-bit float{:error, String.t()}
- Error message if parsing fails
Examples
iex> BigEndianParser.read_double(<<0x40, 0x09, 0x21, 0xFB, 0x54, 0x44, 0x2D, 0x18>>, 0)
{:ok, 3.14159}
@spec read_float(byte_array(), position()) :: {:ok, float()} | {:error, String.t()}
Parses a 32-bit float from a big-endian binary.
Parameters
- byte_array - The binary to parse from
- position - The position to start parsing from
Returns
{:ok, float}
- The parsed 32-bit float{:error, String.t()}
- Error message if parsing fails
Examples
iex> BigEndianParser.read_float(<<0x40, 0x48, 0xF5, 0xC3>>, 0)
{:ok, 3.14}
@spec read_int16(byte_array(), position()) :: {:ok, integer()} | {:error, String.t()}
Parses a signed 16-bit integer from a big-endian binary.
Parameters
- byte_array - The binary to parse from
- position - The position to start parsing from
Returns
{:ok, integer}
- The parsed signed 16-bit integer{:error, String.t()}
- Error message if parsing fails
Examples
iex> BigEndianParser.read_int16(<<0xFF, 0xFE, 0x56>>, 0)
{:ok, -2}
@spec read_int32(byte_array(), position()) :: {:ok, integer()} | {:error, String.t()}
Parses a signed 32-bit integer from a big-endian binary.
Parameters
- byte_array - The binary to parse from
- position - The position to start parsing from
Returns
{:ok, integer}
- The parsed signed 32-bit integer{:error, String.t()}
- Error message if parsing fails
Examples
iex> BigEndianParser.read_int32(<<0xFF, 0xFF, 0xFF, 0xFE>>, 0)
{:ok, -2}
@spec read_uint16(byte_array(), position()) :: {:ok, char()} | {:error, String.t()}
Parses an unsigned 16-bit integer from a big-endian binary.
Parameters
- byte_array - The binary to parse from
- position - The position to start parsing from
Returns
{:ok, integer}
- The parsed unsigned 16-bit integer{:error, String.t()}
- Error message if parsing fails
Examples
iex> BigEndianParser.read_uint16(<<0x12, 0x34, 0x56>>, 0)
{:ok, 0x1234}
@spec read_uint32(byte_array(), position()) :: {:ok, non_neg_integer()} | {:error, String.t()}
Parses an unsigned 32-bit integer from a big-endian binary.
Parameters
- byte_array - The binary to parse from
- position - The position to start parsing from
Returns
{:ok, integer}
- The parsed unsigned 32-bit integer{:error, String.t()}
- Error message if parsing fails
Examples
iex> BigEndianParser.read_uint32(<<0x12, 0x34, 0x56, 0x78>>, 0)
{:ok, 0x12345678}