zamiana zmiennoprzecinkowej na hex

0

Cześć.

Mam problem, jak w najprostrzy sposób zamienić liczbe zmiennoprzecinkową na szesnastkową,
np. 123.125 na 42 f6 40 0
... i jeszcze taki przypadek: -345 na c3 ac 80 0

Za pomoc dziękuję :)

0

ja w swoich starych kodach mam coś takiego:

my_IEEE754::my_IEEE754(float liczba)  //konstruktor z typu float
{
	unsigned char adres[4];
	unsigned char * wtab = adres ;
	*(reinterpret_cast<float*>(wtab)) = liczba;

(...)

żeby wyświetlić to jako hexy, nie powinieneś mieć problemu

0

@autor: to raczej nie zamiana systemu z dziesiętnego na szesnastkowy, ale wypisanie każdego bajtu tego float'a szesnastkowo.

0

tak i jak to zrobić?

0

męcze się z tym,ale źle działa.. jak napisać poprawnie taką funkcje...

0

http://pl.spoj.pl/problems/PP0504D/ (2 ostatnie przykłady)
:D
A rozwiązanie masz jak na dłoni :D

0
#include <iostream>
#include <cstring>
using namespace std;

void printfloat(float);

int main() {
  int t;
  float x;

  cin >> t; /* wczytaj liczbę testów */
  while(t){ 
    cin >> x;
    printfloat(x);
    t--; 
  } 
  return 0;
}

void printfloat(float x){
** ???**
};

Nie wiem co napisać dla tej funkcji, żeby zamieniała poprawnie... prosze o pomoc.

0

Ale kombinujesz... Mój gotowiec ma mniej linii niż to co na razie napisałeś...

Mi przeszło kiedyś takie coś:

int main()
{
	int testct;	
	scanf("%d", &testct);
	while(testct--)
	{
		float f;
		scanf("%f", &f);
		char* ptr = (char*)&f;

		int i;
		for (i = sizeof(float) - 1; i >= 0; i--)
		{
			unsigned char c = *(ptr + i);
			
			printf("%hhx ", c);
		}
		printf("\n");
	}
}
0

Dzięki za odp.
Mam pytanie, co szczegółowo oznaczają następujące linie(dokładnie ptr?):

...

 char* ptr = (char*)&f; 

...

unsigned char c = *(ptr + i);

...

0

Jeszcze jedno pytanie, o co dokładnie chodzi w tych funkcjach?:

                       
...
 unsigned char c = *(ptr + i);
 printf("%hhx ", c);
...
0

poczytaj o arytmetyce wskaźników to nie będziesz zadawał takich pytań o podstawy.

0
my_IEEE754::my_IEEE754(float liczba)  //konstruktor z typu float
{
        unsigned char adres[4];
        unsigned char * wtab = adres ;
        *(reinterpret_cast<float*>(wtab)) = liczba;
 
(...)

Wracając do powyższego kodu, jak wyświetlić w hexy?

0

Mam coś takiego:

void printfloat(float x) {
        unsigned char adres[4];
        unsigned char * wtab = adres ;
        *(reinterpret_cast<float*>(wtab)) = x;
       	
        for(int i = 3; i >= 0; i--)   //kolejne bajty zmiennej float
		cout << hex << uppercase << static_cast<int>(adres[i]) << " ";
		cout<<"\n";
};

Jak zmodyfikować kod, żeby wyświetlał mi literki małe?

0

Nie wiem, hmmm, chyba usuń uppercase? To takie trudne, żeby się dowiedzieć, że aż doznałem szoku

0

Dzięki! :) Jestem początkujący i dużo funkcji nie jest mi znane, dlatego nie dziwcie się mojej niewiedzy. Pytam, bo chcę wiedzieć, a nie omijać pytania. Dlatego za wszelkie wskazówki i pomocy serdecznie dziekuję!

1 użytkowników online, w tym zalogowanych: 0, gości: 1