byteorder.c File Reference

#include "libnjb.h"
#include "byteorder.h"

Functions

u_int64_t njb1_bytes_to_64bit (unsigned char *dp)
void from_64bit_to_njb1_bytes (u_int64_t val, unsigned char *dp)
u_int32_t njb1_bytes_to_32bit (unsigned char *dp)
u_int32_t njb3_bytes_to_32bit (unsigned char *dp)
void from_32bit_to_njb1_bytes (u_int32_t val, unsigned char *dp)
void from_32bit_to_njb3_bytes (u_int32_t val, unsigned char *dp)
u_int16_t njb1_bytes_to_16bit (unsigned char *dp)
u_int16_t njb3_bytes_to_16bit (unsigned char *dp)
void from_16bit_to_njb1_bytes (u_int16_t val, unsigned char *dp)
void from_16bit_to_njb3_bytes (u_int16_t val, unsigned char *dp)
u_int16_t get_msw (u_int32_t word)
u_int16_t get_lsw (u_int32_t word)
u_int64_t make64 (u_int32_t msdw, u_int32_t lsdw)
void split64 (u_int64_t num, u_int32_t *msdw, u_int32_t *lsdw)

Detailed Description

We want libnjb to be "endianness agnostic" i.e. the byte-ordering of the libnjb host platform shall not affect its functionality. These routines are written using shifting and byte operations that will produce the same result regardless of whether the host platform is little-endian, big-endian or even mixed-endian.

NJB1 and the "series 3 family" (NJB2, NJB3, NJB Zen, NJB Zen 2.0) have different byte ordering. NJB1 is essentially big-endian, and the series 3 family little-endian. The terminology could be confusing, so we refer to the different endiannesses as "njb1-endian" and "njb3-endian".


Function Documentation

void from_16bit_to_njb1_bytes ( u_int16_t  val,
unsigned char *  dp 
)

This function will write the u_int16_t of the host platform, val as 2 NJB1-endian bytes beginning at the first byte in the byte array pointed to by *dp.

Parameters:
val the unsigned 16 bit integer to convert to bytes
dp a pointer to the byte array (of atleast 2 bytes) that shall hold the resulting bytes

void from_16bit_to_njb3_bytes ( u_int16_t  val,
unsigned char *  dp 
)

This function will write the u_int16_t of the host platform, val as 2 series 3-endian bytes beginning at the first byte in the byte array pointed to by *dp.

Parameters:
val the unsigned 16 bit integer to convert to bytes
dp a pointer to the byte array (of atleast 2 bytes) that shall hold the resulting bytes

void from_32bit_to_njb1_bytes ( u_int32_t  val,
unsigned char *  dp 
)

This function will write the u_int32_t of the host platform, val as 4 NJB1-endian bytes beginning at the first byte in the byte array pointed to by *dp.

Parameters:
val the unsigned 32 bit integer to convert to bytes
dp a pointer to the byte array (of atleast 4 bytes) that shall hold the resulting bytes

void from_32bit_to_njb3_bytes ( u_int32_t  val,
unsigned char *  dp 
)

This function will write the u_int32_t of the host platform, val as 4 series 3-endian bytes beginning at the first byte in the byte array pointed to by *dp.

Parameters:
val the unsigned 32 bit integer to convert to bytes
dp a pointer to the byte array (of atleast 4 bytes) that shall hold the resulting bytes

void from_64bit_to_njb1_bytes ( u_int64_t  val,
unsigned char *  dp 
)

This function will write the u_int64_t of the host platform, val as NJB1-endian bytes beginning at the first byte in the byte array pointed to by *dp.

Parameters:
val the unsigned 64 bit integer to convert to bytes
dp a pointer to the byte array (of atleast 8 bytes) that shall hold the resulting bytes

u_int16_t get_lsw ( u_int32_t  word  ) 

This simply extract the least significant 16 bit parts of a 32 bit word.

Parameters:
word the 32 bit word to get the least significant 16 bits for
Returns:
the least significant 16 bits as a 16 bit unsigned integer

u_int16_t get_msw ( u_int32_t  word  ) 

This simply extract the most significant 16 bit parts of a 32 bit word.

Parameters:
word the 32 bit word to get the most significant 16 bits for
Returns:
the most significant 16 bits as a 16 bit unsigned integer

u_int64_t make64 ( u_int32_t  msdw,
u_int32_t  lsdw 
)

Create a 64 bit unsigned integer from two 32 bit integers representing the most/least significant part of it.

Parameters:
msdw the most significant 32 bits
lsdw the least significant 32 bits
Returns:
a 64 bit unsigned integer made by joining the two parts

u_int16_t njb1_bytes_to_16bit ( unsigned char *  dp  ) 

This function will take 2 bytes from the NJB1-endian byte array pointed to by *dp and transform it to a u_int16_t unsigned 16 bit integer on the host platform.

Parameters:
dp a pointer to the 2 raw bytes in NJB1 endianness to convert
Returns:
an unsigned 16 bit integer

u_int32_t njb1_bytes_to_32bit ( unsigned char *  dp  ) 

This function will take 4 bytes from the NJB1-endian byte array pointed to by *dp and transform it to a u_int32_t on the host platform.

Parameters:
dp a pointer to the 4 raw bytes in NJB1 endianness to convert
Returns:
an unsigned 32 bit integer

u_int64_t njb1_bytes_to_64bit ( unsigned char *  dp  ) 

This function will take 8 bytes from the njb1-endian byte array pointed to by *dp and transform it to a u_int64_t on the host platform.

Parameters:
dp a pointer to the 8 raw bytes in NJB1 endianness to convert
Returns:
an unsigned 64 bit integer

u_int16_t njb3_bytes_to_16bit ( unsigned char *  dp  ) 

This function will take 2 bytes from the series 3-endian byte array pointed to by *dp and transform it to a u_int16_t unsigned 16 bit integer on the host platform.

Parameters:
dp a pointer to the 2 raw bytes in series 3 endianness to convert
Returns:
an unsigned 16 bit integer

u_int32_t njb3_bytes_to_32bit ( unsigned char *  dp  ) 

This function will take 4 bytes from the series 3-endian byte array pointed to by *dp and transform it to a u_int32_t on the host platform.

Parameters:
dp a pointer to the 4 raw bytes in series 3 endianness to convert
Returns:
an unsigned 32 bit integer

void split64 ( u_int64_t  num,
u_int32_t *  msdw,
u_int32_t *  lsdw 
)

Split a 64 bit unsigned integer into two unsigned 32 bit integer representing the most/least significant 32 bits of the incoming 64 bit integer.

Parameters:
num the 64 bit integer to split
msdw a pointer to the 32 bit integer that shall hold the most significant 32 bits of the 64 bit integer
lsdw a pointer to the 32 bit integer that shall hold the least significant 32 bits of the 64 bit integer


Generated on Mon Sep 11 00:52:12 2006 for libnjb by  doxygen 1.4.7