ApraLinuxUtils 1.0.0
C++ utility library for embedded Linux systems
 
Loading...
Searching...
No Matches
RealHexParser.cpp
Go to the documentation of this file.
1/*
2 * RealHexParser.cpp
3 *
4 * Copyright (c) 2024 Apra Labs
5 *
6 * This file is part of ApraUtils.
7 *
8 * Licensed under the MIT License.
9 * See LICENSE file in the project root for full license information.
10 */
11
12#include "utils/RealHexParser.h"
13using namespace apra;
14
15RealHexParser::RealHexParser(uint8_t realPrecisionDigits) :
16 m_readDigits(realPrecisionDigits), m_bitsMask(0) {
17 if (realPrecisionDigits > 17) {
18 throw "Invalid value. Supported realDigits is upto 17. Ex 15.17";
19 }
20 for (uint32_t i = 0; i < realPrecisionDigits; i++) {
21 m_bitsMask = (m_bitsMask << 1) | 0x1;
22 }
23}
24
27
28uint32_t RealHexParser::toHex(double realNumber) {
29 uint32_t decimalVal = realNumber;
30 uint32_t integerVal = realNumber;
31 realNumber = realNumber - integerVal;
32 for (int16_t i = 0; i < m_readDigits; i++) {
33 realNumber *= 2;
34 integerVal = realNumber;
35 if (integerVal == 1) {
36 realNumber = realNumber - integerVal;
37 decimalVal = (decimalVal << 1) + 1;
38 } else {
39 decimalVal = decimalVal << 1;
40 }
41 }
42 return decimalVal;
43}
44
45double RealHexParser::toReal(uint32_t hexNumber) {
46 double decimalVal = 0;
47 uint16_t fractionValue = 0;
48 decimalVal = hexNumber >> m_readDigits;
49 fractionValue = hexNumber & m_bitsMask;
50 double temp = 0.00;
51 double twos = 2.00;
52 for (int i = (m_readDigits-1); i >= 0; i--) {
53 temp += (fractionValue >> i & 0x1) / twos;
54 twos = twos * 2;
55 }
56 return (decimalVal + temp);
57}
RealHexParser(uint8_t realPrecisionDigits)
double toReal(uint32_t hexNumber)
uint32_t toHex(double realNumber)