Torch
Loading...
Searching...
No Matches
BKByteUtils.h
1#pragma once
2
3#include <cstdint>
4#include <vector>
5
6namespace BK64 {
7
8// Big-endian scalar reads from raw ROM/overlay bytes.
9inline uint16_t ReadU16BE(const uint8_t* p) {
10 return static_cast<uint16_t>((p[0] << 8) | p[1]);
11}
12
13inline int16_t ReadS16BE(const uint8_t* p) {
14 return static_cast<int16_t>(ReadU16BE(p));
15}
16
17inline uint32_t ReadU32BE(const uint8_t* p) {
18 return ((uint32_t)p[0] << 24) | ((uint32_t)p[1] << 16) | ((uint32_t)p[2] << 8) | (uint32_t)p[3];
19}
20
21inline int32_t ReadS32BE(const uint8_t* p) {
22 return static_cast<int32_t>(ReadU32BE(p));
23}
24
25inline void WriteU32BE(uint8_t* p, uint32_t value) {
26 p[0] = static_cast<uint8_t>(value >> 24);
27 p[1] = static_cast<uint8_t>(value >> 16);
28 p[2] = static_cast<uint8_t>(value >> 8);
29 p[3] = static_cast<uint8_t>(value);
30}
31
32inline void PushBE(std::vector<uint8_t>& out, uint32_t value, int bytes) {
33 for (int i = bytes - 1; i >= 0; i--) {
34 out.push_back(static_cast<uint8_t>(value >> (i * 8)));
35 }
36}
37
38} // namespace BK64