Files
2026-04-04 09:15:37 -05:00

90 lines
2.4 KiB
C

#include "all.h"
fn u64 writeU64ToBufferLE(u8* buffer, u64 value) {
buffer[0] = (u8)(value & 0xFF);
buffer[1] = (u8)((value >> 8) & 0xFF);
buffer[2] = (u8)((value >> 16) & 0xFF);
buffer[3] = (u8)((value >> 24) & 0xFF);
buffer[4] = (u8)((value >> 32) & 0xFF);
buffer[5] = (u8)((value >> 40) & 0xFF);
buffer[6] = (u8)((value >> 48) & 0xFF);
buffer[7] = (u8)((value >> 56) & 0xFF);
return 8;// number of bytes written
}
fn u64 writeU32ToBufferLE(u8* buffer, u32 value) {
buffer[0] = (u8)(value & 0xFF);
buffer[1] = (u8)((value >> 8) & 0xFF);
buffer[2] = (u8)((value >> 16) & 0xFF);
buffer[3] = (u8)((value >> 24) & 0xFF);
return 4;// number of bytes written
}
fn u64 writeI32ToBufferLE(u8* buffer, i32 value) {
buffer[0] = (u8)(value & 0xFF);
buffer[1] = (u8)((value >> 8) & 0xFF);
buffer[2] = (u8)((value >> 16) & 0xFF);
buffer[3] = (u8)((value >> 24) & 0xFF);
return 4;// number of bytes written
}
fn u64 writeU16ToBufferLE(u8* buffer, u16 value) {
buffer[0] = (u8)(value & 0xFF);
buffer[1] = (u8)((value >> 8) & 0xFF);
return 2;// number of bytes written
}
fn u64 writeF32ToBufferLE(u8* buffer, f32 value) {
u32 bits;
memcpy(&bits, &value, sizeof(u32)); // reinterpret float bits as integer
buffer[0] = (u8)(bits & 0xFF);
buffer[1] = (u8)((bits >> 8) & 0xFF);
buffer[2] = (u8)((bits >> 16) & 0xFF);
buffer[3] = (u8)((bits >> 24) & 0xFF);
return 4;// number of bytes written
}
fn u64 readU64FromBufferLE(u8 *buffer) {
return (u64)buffer[0] |
((u64)buffer[1] << 8) |
((u64)buffer[2] << 16) |
((u64)buffer[3] << 24) |
((u64)buffer[4] << 32) |
((u64)buffer[5] << 40) |
((u64)buffer[6] << 48) |
((u64)buffer[7] << 56);
}
fn u32 readU32FromBufferLE(u8 *buffer) {
return (u32)buffer[0] |
((u32)buffer[1] << 8) |
((u32)buffer[2] << 16) |
((u32)buffer[3] << 24);
}
fn i32 readI32FromBufferLE(u8 *buffer) {
return (i32)buffer[0] |
((i32)buffer[1] << 8) |
((i32)buffer[2] << 16) |
((i32)buffer[3] << 24);
}
fn u16 readU16FromBufferLE(u8 *buffer) {
return (u16)buffer[0] |
((u16)buffer[1] << 8);
}
fn f32 readF32FromBufferLE(u8 *buf) {
u32 bits = 0;
bits |= (u32)(u8)buf[0] << 0;
bits |= (u32)(u8)buf[1] << 8;
bits |= (u32)(u8)buf[2] << 16;
bits |= (u32)(u8)buf[3] << 24;
f32 value;
memcpy(&value, &bits, sizeof(f32));
return value;
}