85 lines
2.1 KiB
C++
85 lines
2.1 KiB
C++
|
#include "CrossLang.hpp"
|
||
|
|
||
|
namespace Tesses::CrossLang
|
||
|
{
|
||
|
double BitConverter::ToDoubleBits(uint64_t v)
|
||
|
{
|
||
|
return *(double*)&v;
|
||
|
}
|
||
|
uint64_t BitConverter::ToUintBits(double v)
|
||
|
{
|
||
|
return *(uint64_t*)&v;
|
||
|
}
|
||
|
double BitConverter::ToDoubleBE(uint8_t& b)
|
||
|
{
|
||
|
return ToDoubleBits(ToUint64BE(b));
|
||
|
}
|
||
|
uint64_t BitConverter::ToUint64BE(uint8_t& b)
|
||
|
{
|
||
|
uint8_t* b2 = &b;
|
||
|
uint64_t v = 0;
|
||
|
v |= ((uint64_t)b2[0] << 56);
|
||
|
v |= ((uint64_t)b2[1] << 48);
|
||
|
v |= ((uint64_t)b2[2] << 40);
|
||
|
v |= ((uint64_t)b2[3] << 32);
|
||
|
v |= ((uint64_t)b2[4] << 24);
|
||
|
v |= ((uint64_t)b2[5] << 16);
|
||
|
v |= ((uint64_t)b2[6] << 8);
|
||
|
v |= (uint64_t)b2[7];
|
||
|
return v;
|
||
|
}
|
||
|
uint32_t BitConverter::ToUint32BE(uint8_t& b)
|
||
|
{
|
||
|
uint8_t* b2 = &b;
|
||
|
uint32_t v = 0;
|
||
|
|
||
|
v |= ((uint32_t)b2[0] << 24);
|
||
|
v |= ((uint32_t)b2[1] << 16);
|
||
|
v |= ((uint32_t)b2[2] << 8);
|
||
|
v |= (uint32_t)b2[3];
|
||
|
return v;
|
||
|
}
|
||
|
uint16_t BitConverter::ToUint16BE(uint8_t& b)
|
||
|
{
|
||
|
uint8_t* b2 = &b;
|
||
|
uint16_t v = 0;
|
||
|
|
||
|
|
||
|
v |= ((uint16_t)b2[0] << 8);
|
||
|
v |= (uint16_t)b2[1];
|
||
|
return v;
|
||
|
}
|
||
|
void BitConverter::FromDoubleBE(uint8_t& b, double v)
|
||
|
{
|
||
|
FromUint64BE(b,ToUintBits(v));
|
||
|
}
|
||
|
void BitConverter::FromUint64BE(uint8_t& b, uint64_t v)
|
||
|
{
|
||
|
uint8_t* b2 = &b;
|
||
|
b2[0] = (uint8_t)(v >> 56);
|
||
|
b2[1] = (uint8_t)(v >> 48);
|
||
|
b2[2] = (uint8_t)(v >> 40);
|
||
|
b2[3] = (uint8_t)(v >> 32);
|
||
|
b2[4] = (uint8_t)(v >> 24);
|
||
|
b2[5] = (uint8_t)(v >> 16);
|
||
|
b2[6] = (uint8_t)(v >> 8);
|
||
|
b2[7] = (uint8_t)v;
|
||
|
}
|
||
|
void BitConverter::FromUint32BE(uint8_t& b, uint32_t v)
|
||
|
{
|
||
|
uint8_t* b2 = &b;
|
||
|
|
||
|
b2[0] = (uint8_t)(v >> 24);
|
||
|
b2[1] = (uint8_t)(v >> 16);
|
||
|
b2[2] = (uint8_t)(v >> 8);
|
||
|
b2[3] = (uint8_t)v;
|
||
|
}
|
||
|
void BitConverter::FromUint16BE(uint8_t& b, uint16_t v)
|
||
|
{
|
||
|
uint8_t* b2 = &b;
|
||
|
|
||
|
b2[0] = (uint8_t)(v >> 8);
|
||
|
b2[1] = (uint8_t)v;
|
||
|
}
|
||
|
|
||
|
};
|