|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Napoli
Messaggi: 999
|
[C-gcc] Printf per esadecimali
salve,
devo stampare delle variabili double in rappresentazione esadecimale usando il formato %X mi viene restituito un valore come se la variabile fosse float cioè a 8 cifre (32 bit) . uso codeblock come ide. come faccio a vedere le 16 cifre esadecimali che rappresentano per intero i 64 bit(8 byte) della mia variabile double ?? grazie!
__________________
Intel Pentium IV 3,0 GHz, Asus P5SD2-X , 1.0 Gb ddr2, Radeon X550 , Maxtor 160Gb sata, Hitachi 100 gb pata,Piooner Dvr-109 ,Microsoft Windows XP Professional Service Pack 2 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Napoli
Messaggi: 999
|
sono riuscito a stampare tutto il double usando due volte il formato %X
esempio printf("\n%d %X %X",n,vardouble); il problema è che la variabile double viene stampata male, cioè : 3D77873A BFF85364 anzichè BFF853643D77873A che è il valore esatto. Praticamente le coppie di 4 byte sono stampate al contrario...
__________________
Intel Pentium IV 3,0 GHz, Asus P5SD2-X , 1.0 Gb ddr2, Radeon X550 , Maxtor 160Gb sata, Hitachi 100 gb pata,Piooner Dvr-109 ,Microsoft Windows XP Professional Service Pack 2 |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
prova col formato %llX (elle minuscola, elle minuscola, X); non sono sicuro che funzioni peró.
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Napoli
Messaggi: 999
|
si c'avevo provato...
mi sà che la printf gestisce male gli esadecimali.
__________________
Intel Pentium IV 3,0 GHz, Asus P5SD2-X , 1.0 Gb ddr2, Radeon X550 , Maxtor 160Gb sata, Hitachi 100 gb pata,Piooner Dvr-109 ,Microsoft Windows XP Professional Service Pack 2 |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2005
Città: ~
Messaggi: 740
|
Codice:
double d = 192.002f;
long long numToPrint = *((long long *)(&d));
printf("%lld\n", numToPrint);
__________________
Ciao ciao cagnolino Billy MacMini late 2009, 2.53GHz, 4GB ram, 320GB hard disk, Snow Leopard 10.8.2 - iPod Nano 6th gen. XBOX Live GamerTag: InsaneMau |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
E se togli lo spazio tra i due %X%X ??
__________________
GPU Compiler Engineer |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Quote:
__________________
GPU Compiler Engineer |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Così forse va
Codice:
#include <stdio.h>
int main(int argc, char** argv)
{
double d = 192341.231;
printf("%016llX\n", d);
return 0;
}
__________________
GPU Compiler Engineer |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Napoli
Messaggi: 999
|
vi ringrazio per i suggerimenti...
il fatto del passaggio all'indirizzo di maulattu non và, ma in tutti i casi per quello che serve a me nn andrebbe bene comunque. x animoveneziano, anche quello non funge, avevo provato già a dare un formato più lungo, ma il problema x quello che ho capito consiste nel fatto che la printf vede %X come una rappresentazione a 4 byte, se si cerca di rappresentare un double è come se restassero gli altry 4 byte a spasso nel buffer di stampa, e si possono recuperare aggiungendo un secondo %X il guaio è che anche così escono invertiti... potrei agire manualmente sui bit, ma sto arrangiando così. Il fatto è che devo vedere gli esadecimali per confrontare dei valori, mi sarebbe comodo usare il visualizzatore di codeblock sotto debug ma nn funge con gli esadecimali ! quindi sto andando piano piano con le prontf...
__________________
Intel Pentium IV 3,0 GHz, Asus P5SD2-X , 1.0 Gb ddr2, Radeon X550 , Maxtor 160Gb sata, Hitachi 100 gb pata,Piooner Dvr-109 ,Microsoft Windows XP Professional Service Pack 2 |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
int *temp = (int *)&vardouble;
printf("%X%X", temp[0], temp[1]); L'ordine lo puoi cambiare come più ti piace. |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Quote:
Questo è l'output che ottengo dal programma che ti ho postato sopra : Codice:
[hades@artemis ~]$ nano prova.c [hades@artemis ~]$ gcc prova.c -o prova [hades@artemis ~]$ ./prova 00007FFF8C5C2B48 [hades@artemis ~]$
__________________
GPU Compiler Engineer |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:44.



















