forked from flash/temporary-satori-hole
159 lines
4.8 KiB
C
159 lines
4.8 KiB
C
#include "pack.h"
|
|
|
|
static inline void sat_pack_16be(uint8_t *buffer, uint16_t num) {
|
|
*buffer++ = num >> 8;
|
|
*buffer++ = num;
|
|
}
|
|
static inline void sat_pack_16le(uint8_t *buffer, uint16_t num) {
|
|
*buffer++ = num;
|
|
*buffer++ = num >> 8;
|
|
}
|
|
|
|
static inline void sat_pack_32be(uint8_t *buffer, uint32_t num) {
|
|
*buffer++ = num >> 24;
|
|
*buffer++ = num >> 16;
|
|
*buffer++ = num >> 8;
|
|
*buffer++ = num;
|
|
}
|
|
static inline void sat_pack_32le(uint8_t *buffer, uint32_t num) {
|
|
*buffer++ = num;
|
|
*buffer++ = num >> 8;
|
|
*buffer++ = num >> 16;
|
|
*buffer++ = num >> 24;
|
|
}
|
|
|
|
static inline void sat_pack_64be(uint8_t *buffer, uint64_t num) {
|
|
*buffer++ = num >> 56;
|
|
*buffer++ = num >> 48;
|
|
*buffer++ = num >> 40;
|
|
*buffer++ = num >> 32;
|
|
*buffer++ = num >> 24;
|
|
*buffer++ = num >> 16;
|
|
*buffer++ = num >> 8;
|
|
*buffer++ = num;
|
|
}
|
|
static inline void sat_pack_64le(uint8_t *buffer, uint64_t num) {
|
|
*buffer++ = num;
|
|
*buffer++ = num >> 8;
|
|
*buffer++ = num >> 16;
|
|
*buffer++ = num >> 24;
|
|
*buffer++ = num >> 32;
|
|
*buffer++ = num >> 40;
|
|
*buffer++ = num >> 48;
|
|
*buffer++ = num >> 56;
|
|
}
|
|
|
|
|
|
void sat_pack_i16be(uint8_t *buffer, int16_t num) { sat_pack_16be(buffer, num); }
|
|
void sat_pack_u16be(uint8_t *buffer, uint16_t num) { sat_pack_16be(buffer, num); }
|
|
|
|
void sat_pack_i32be(uint8_t *buffer, int32_t num) { sat_pack_32be(buffer, num); }
|
|
void sat_pack_u32be(uint8_t *buffer, uint32_t num) { sat_pack_32be(buffer, num); }
|
|
|
|
void sat_pack_i64be(uint8_t *buffer, int64_t num) { sat_pack_64be(buffer, num); }
|
|
void sat_pack_u64be(uint8_t *buffer, uint64_t num) { sat_pack_64be(buffer, num); }
|
|
|
|
void sat_pack_i16le(uint8_t *buffer, int16_t num) { sat_pack_16le(buffer, num); }
|
|
void sat_pack_u16le(uint8_t *buffer, uint16_t num) { sat_pack_16le(buffer, num); }
|
|
|
|
void sat_pack_i32le(uint8_t *buffer, int32_t num) { sat_pack_32le(buffer, num); }
|
|
void sat_pack_u32le(uint8_t *buffer, uint32_t num) { sat_pack_32le(buffer, num); }
|
|
|
|
void sat_pack_i64le(uint8_t *buffer, int64_t num) { sat_pack_64le(buffer, num); }
|
|
void sat_pack_u64le(uint8_t *buffer, uint64_t num) { sat_pack_64le(buffer, num); }
|
|
|
|
|
|
static inline uint16_t sat_unpack_16be(uint8_t *buffer) {
|
|
return ((uint16_t)buffer[0] << 8) | buffer[1];
|
|
}
|
|
static inline uint16_t sat_unpack_16le(uint8_t *buffer) {
|
|
return ((uint16_t)buffer[1] << 8) | buffer[0];
|
|
}
|
|
|
|
static inline uint32_t sat_unpack_32be(uint8_t *buffer) {
|
|
return ((uint32_t)buffer[0] << 24) | ((uint32_t)buffer[1] << 16)
|
|
| ((uint32_t)buffer[2] << 8) | buffer[3];
|
|
}
|
|
static inline uint32_t sat_unpack_32le(uint8_t *buffer) {
|
|
return ((uint32_t)buffer[3] << 24) | ((uint32_t)buffer[2] << 16)
|
|
| ((uint32_t)buffer[1] << 8) | buffer[0];
|
|
}
|
|
|
|
static inline uint64_t sat_unpack_64be(uint8_t *buffer) {
|
|
return ((uint64_t)buffer[0] << 56) | ((uint64_t)buffer[1] << 48)
|
|
| ((uint64_t)buffer[2] << 40) | ((uint64_t)buffer[3] << 32)
|
|
| ((uint64_t)buffer[4] << 24) | ((uint64_t)buffer[5] << 16)
|
|
| ((uint64_t)buffer[6] << 8) | buffer[7];
|
|
}
|
|
static inline uint64_t sat_unpack_64le(uint8_t *buffer) {
|
|
return ((uint64_t)buffer[7] << 56) | ((uint64_t)buffer[6] << 48)
|
|
| ((uint64_t)buffer[5] << 40) | ((uint64_t)buffer[4] << 32)
|
|
| ((uint64_t)buffer[3] << 24) | ((uint64_t)buffer[2] << 16)
|
|
| ((uint64_t)buffer[1] << 8) | buffer[0];
|
|
}
|
|
|
|
|
|
static inline int16_t sat_sign_i16(uint16_t num) {
|
|
if(num <= 0x7FFFu)
|
|
return num;
|
|
|
|
return -1 - (int16_t)(0xFFFF - num);
|
|
}
|
|
|
|
static inline int32_t sat_sign_i32(uint32_t num) {
|
|
if(num <= 0x7FFFFFFFu)
|
|
return num;
|
|
|
|
return -1 - (int32_t)(0xFFFFFFFFu - num);
|
|
}
|
|
|
|
static inline int64_t sat_sign_i64(uint64_t num) {
|
|
if(num <= 0x7FFFFFFFFFFFFFFFu)
|
|
return num;
|
|
|
|
return -1 - (int64_t)(0xFFFFFFFFFFFFFFFFu - num);
|
|
}
|
|
|
|
|
|
int16_t sat_unpack_i16be(uint8_t *buffer) {
|
|
return sat_sign_i16(sat_unpack_16be(buffer));
|
|
}
|
|
uint16_t sat_unpack_u16be(uint8_t *buffer) {
|
|
return sat_unpack_16be(buffer);
|
|
}
|
|
|
|
int32_t sat_unpack_i32be(uint8_t *buffer) {
|
|
return sat_sign_i32(sat_unpack_32be(buffer));
|
|
}
|
|
uint32_t sat_unpack_u32be(uint8_t *buffer) {
|
|
return sat_unpack_32be(buffer);
|
|
}
|
|
|
|
int64_t sat_unpack_i64be(uint8_t *buffer) {
|
|
return sat_sign_i64(sat_unpack_64be(buffer));
|
|
}
|
|
uint64_t sat_unpack_u64be(uint8_t *buffer) {
|
|
return sat_unpack_64be(buffer);
|
|
}
|
|
|
|
int16_t sat_unpack_i16le(uint8_t *buffer) {
|
|
return sat_sign_i16(sat_unpack_16le(buffer));
|
|
}
|
|
uint16_t sat_unpack_u16le(uint8_t *buffer) {
|
|
return sat_unpack_16le(buffer);
|
|
}
|
|
|
|
int32_t sat_unpack_i32le(uint8_t *buffer) {
|
|
return sat_sign_i32(sat_unpack_32le(buffer));
|
|
}
|
|
uint32_t sat_unpack_u32le(uint8_t *buffer) {
|
|
return sat_unpack_32le(buffer);
|
|
}
|
|
|
|
int64_t sat_unpack_i64le(uint8_t *buffer) {
|
|
return sat_sign_i64(sat_unpack_64le(buffer));
|
|
}
|
|
uint64_t sat_unpack_u64le(uint8_t *buffer) {
|
|
return sat_unpack_64le(buffer);
|
|
}
|