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ę :)
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ę :)
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
@autor: to raczej nie zamiana systemu z dziesiętnego na szesnastkowy, ale wypisanie każdego bajtu tego float'a szesnastkowo.
tak i jak to zrobić?
męcze się z tym,ale źle działa.. jak napisać poprawnie taką funkcje...
http://pl.spoj.pl/problems/PP0504D/ (2 ostatnie przykłady)
:D
A rozwiązanie masz jak na dłoni :D
#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.
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");
}
}
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);
...
Jeszcze jedno pytanie, o co dokładnie chodzi w tych funkcjach?:
...
unsigned char c = *(ptr + i);
printf("%hhx ", c);
...
poczytaj o arytmetyce wskaźników to nie będziesz zadawał takich pytań o podstawy.
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?
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?
Nie wiem, hmmm, chyba usuń uppercase? To takie trudne, żeby się dowiedzieć, że aż doznałem szoku
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ę!