ProtoCore v0.0.1
Deterministic, zero-heap network stack for embedded targets
Loading...
Searching...
No Matches
endian.h File Reference

Fixed-width integer serializers into a raw uint8_t* buffer - one source of truth. More...

#include <stddef.h>
#include <stdint.h>

Go to the source code of this file.

Functions

size_t pc_wr16le (uint8_t *p, uint16_t v)
 Write v little-endian at p.
 
size_t pc_wr32le (uint8_t *p, uint32_t v)
 Write v little-endian at p.
 
size_t pc_wr64le (uint8_t *p, uint64_t v)
 Write v little-endian at p.
 
uint16_t pc_rd16le (const uint8_t *p)
 Read a little-endian u16 at p.
 
uint32_t pc_rd32le (const uint8_t *p)
 Read a little-endian u32 at p.
 
uint64_t pc_rd64le (const uint8_t *p)
 Read a little-endian u64 at p.
 
size_t pc_wr16be (uint8_t *p, uint16_t v)
 Write v big-endian at p.
 
size_t pc_wr32be (uint8_t *p, uint32_t v)
 Write v big-endian at p.
 
size_t pc_wr64be (uint8_t *p, uint64_t v)
 Write v big-endian at p.
 
uint16_t pc_rd16be (const uint8_t *p)
 Read a big-endian u16 at p.
 
uint32_t pc_rd32be (const uint8_t *p)
 Read a big-endian u32 at p.
 
uint64_t pc_rd64be (const uint8_t *p)
 Read a big-endian u64 at p.
 

Detailed Description

Fixed-width integer serializers into a raw uint8_t* buffer - one source of truth.

Every binary codec (ADS, AMQP, C37.118, NetFlow, WAL, SHA-1/256, NTLMSSP/SMB2, ...) had its own byte-for-byte copy of these little-/big-endian pack/unpack helpers under a different local name (put16le / put16 / wr16 / store_be32 / put_u32 ...). They now live here once.

Writers return the number of bytes written (2/4/8) so a caller can advance an offset; a caller that only needs the side effect simply ignores the return. Readers assume p has at least the width in range - callers bounds-check the buffer, as the hand-rolled copies did.

Header-only and pure (only <stdint.h> / <stddef.h>) so it is host-testable and identical on device + host, and carries zero link cost when unused.

Author
Douglas Quigg (dstroy0)
Date
2026

Definition in file endian.h.

Function Documentation

◆ pc_wr16le()

size_t pc_wr16le ( uint8_t *  p,
uint16_t  v 
)
inline

Write v little-endian at p.

Returns
2.

Definition at line 32 of file endian.h.

Referenced by pc_pcap_global_header().

◆ pc_wr32le()

size_t pc_wr32le ( uint8_t *  p,
uint32_t  v 
)
inline

Write v little-endian at p.

Returns
4.

Definition at line 40 of file endian.h.

Referenced by pc_pcap_global_header(), and pc_pcap_record_header().

◆ pc_wr64le()

size_t pc_wr64le ( uint8_t *  p,
uint64_t  v 
)
inline

Write v little-endian at p.

Returns
8.

Definition at line 50 of file endian.h.

◆ pc_rd16le()

uint16_t pc_rd16le ( const uint8_t *  p)
inline

Read a little-endian u16 at p.

Definition at line 60 of file endian.h.

◆ pc_rd32le()

uint32_t pc_rd32le ( const uint8_t *  p)
inline

Read a little-endian u32 at p.

Definition at line 66 of file endian.h.

◆ pc_rd64le()

uint64_t pc_rd64le ( const uint8_t *  p)
inline

Read a little-endian u64 at p.

Definition at line 72 of file endian.h.

◆ pc_wr16be()

size_t pc_wr16be ( uint8_t *  p,
uint16_t  v 
)
inline

Write v big-endian at p.

Returns
2.

Definition at line 85 of file endian.h.

◆ pc_wr32be()

size_t pc_wr32be ( uint8_t *  p,
uint32_t  v 
)
inline

Write v big-endian at p.

Returns
4.

Definition at line 93 of file endian.h.

Referenced by ghash_mul(), and pc_kdf_ctr_hmac_sha256().

◆ pc_wr64be()

size_t pc_wr64be ( uint8_t *  p,
uint64_t  v 
)
inline

Write v big-endian at p.

Returns
8.

Definition at line 103 of file endian.h.

◆ pc_rd16be()

uint16_t pc_rd16be ( const uint8_t *  p)
inline

Read a big-endian u16 at p.

Definition at line 113 of file endian.h.

◆ pc_rd32be()

uint32_t pc_rd32be ( const uint8_t *  p)
inline

Read a big-endian u32 at p.

Definition at line 119 of file endian.h.

Referenced by ghash_key_init().

◆ pc_rd64be()

uint64_t pc_rd64be ( const uint8_t *  p)
inline

Read a big-endian u64 at p.

Definition at line 125 of file endian.h.