Portál AbcLinuxu, 4. listopadu 2025 08:06
#include <cstdio>
#include <iostream>
int main(int argc, char** argv)
{
  float f = 1.23456f;
  unsigned int raw_f;
  char* raw_f_cstr;
  /* raw_f = *(unsigned int*)&f; <- Starý Cčkový způsob */
  /* C++ovější způsob */
  raw_f = *reinterpret_cast<unsigned int*>(&f);
  /* Jako unsigned int */
  std::cout << f << " " << raw_f << " " << std::hex << raw_f << std::endl;
  /* Převod na Cčkový string */
  asprintf(&raw_f_cstr, "%x", raw_f);
  std::cout << raw_f_cstr << std::endl;
  return 0;
}
Jen tak mimochodem, převádět hexadecimální řetězec do binárního switchem je trochu dřevorubecké, udělal bych to spíš takhle
#define BITS_IN_INT (sizeof(int) * 8)
#define MAX_HEX_NUMS (sizeof(int) * 2)
std::string hex_to_bin(const std::string s)
{
  size_t steps;
  size_t sl;
  std::string bin_out;
  sl = s.length();
  if (sl == 0)
    return "";
  steps = sl / MAX_HEX_NUMS;
  if (!(sl % MAX_HEX_NUMS))
    steps--;
  bin_out.reserve((steps + 1) * BITS_IN_INT + 1);
  for (size_t idx = 0; idx <= steps; idx++) {
    int num;
    size_t from_idx = MAX_HEX_NUMS * idx;
    std::string ss = s.substr(from_idx, MAX_HEX_NUMS);
    if (sscanf(ss.c_str(), "%x", &num) < 1) {
      std::cout << "Invalid input" << std::endl;
      return "";
    }
    for (size_t sidx = 0; sidx < BITS_IN_INT; sidx++) {
      if (num & (1 << (BITS_IN_INT - sidx - 1)))
        bin_out.append("1");
      else
        bin_out.append("0");
    }
  }
  return bin_out;
}
            mantissa = input & 0x7fffff; exponent = input >> 24; sign = (input >> 23) & 1; result = sign * mantissa * exponent * 2e-23
Zatim mi ale nenapada ta obracena cesta, tedy z cisla ziskat ten hex-string. (a nejaky takovy srozumitelny navod jsem nenasel).A v čem máš problém? Vždyť je to napsaný v tom dokumentu. A proč nemůžeš vzít normální IEEE float a prostě přehodit exponent a sign?
        Tiskni
            
                Sdílej:
                
                
                
                
                
                
            
    
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.