#include <iostream>
#include <vector>
std::string float_TO_string(float fl)
{
    std::vector<unsigned char> a(sizeof(float));
    memcpy(&a[0], &fl, sizeof(float));
    std::string result;
    for (unsigned char byte : a) {
        char hex[3];
        snprintf(hex, sizeof(hex), "%02X", byte);
        result += hex;
    }
    return result;
}
std::string float_TO_string(double dl)
{
    std::vector<unsigned char> a(sizeof(double));
    memcpy(&a[0], &dl, sizeof(double));
    std::string result;
    for (unsigned char byte : a) {
        char hex[3];
        snprintf(hex, sizeof(hex), "%02X", byte);
        result += hex;
    }
    return result;
}
float string_TO_float(std::string f1)
{
    std::vector<unsigned char> a(4);
    for (int i = 0; i < 4; ++i) {
        a = std::stoul(f1.substr(i * 2, 2), nullptr, 16);
    }
    float fl;
    memcpy(&fl, &a[0], sizeof(float));
    return fl;
}
double string_TO_double(std::string d1)
{
    std::vector<unsigned char> a(8);
    for (int i = 0; i < 8; ++i) {
        a = std::stoul(d1.substr(i * 2, 2), nullptr, 16);
    }
    double dl;
    memcpy(&dl, &a[0], sizeof(double));
    return dl;
}
int main()
{
    // 測試轉換函數
    float f = 3.14f;
    double d = 6.28;
    std::string floatHex = float_TO_string(f);
    std::string doubleHex = float_TO_string(d);
    std::cout << "Float to Hex String: " << floatHex << std::endl;
    std::cout << "Double to Hex String: " << doubleHex << std::endl;
    float convertedFloat = string_TO_float(floatHex);
    double convertedDouble = string_TO_double(doubleHex);
    std::cout << "Hex String to Float: " << convertedFloat << std::endl;
    std::cout << "Hex String to Double: " << convertedDouble << std::endl;
    return 0;
}