2016-08-08 42 views
-4

Hallo Ich habe eine doppelte Variable mit Wert mit dem Namen outputSampleRate 0x41886a0000000000C - Notwendigkeit Erklärung auf printf Optionen Verhalten

ich andere Kombination von printf Optionen versuchen, und ich bekomme durch den Ausgang sehr verwirrt. Hier

ist der Code:

printf("\n\noutputSampleRate 0x%16x  \n", outputSampleRate); 
    printf("outputSampleRate 0x%llx  \n", outputSampleRate); 
    printf("outputSampleRate 0x%.llx  \n", outputSampleRate); 
    printf("outputSampleRate 0x%.16x  \n", outputSampleRate); 
    printf("outputSampleRate 0x%16llx  \n", outputSampleRate); 
    printf("outputSampleRate 0x%.16llx  \n\n", outputSampleRate); 

Hier ist der Ausdruck auf der Konsole:

outputSampleRate %llx 0x    0 
outputSampleRate %16x 0x41886a0000000000 
outputSampleRate %.llx 0x41886a0000000000 
outputSampleRate %.16x 0x0000000000000000 
outputSampleRate %16llx 0x41886a0000000000 
outputSampleRate %.16llx 0x41886a0000000000 

Bitte korrigieren Sie mich, wenn ich falsch liege:

%llx print as long long (64 bit) in hex representation 
%16x print 16 digits, ignore leading 0s in hex representation 
%.llx ????what is this? 
%.16x print at least 16 digits in hex repesentation 
%16llx print 16 digits as a long long in hex representation 
%.16llx print at least 16 digits as a long long in hex representation 

Außerdem habe ich die folgenden Fragen:

1. How does %llx give me 0x    0 ? 
2. Why %.llx and %.16x behave differently ? 

Vielen Dank für jede Eingabe, um diesen C-Neuling zu speichern.

+0

http://en.cppreference.com/w/c/io/fprintf – a3f

+0

Aus Ihrer Frage nicht klar ist, was du erreichen willst. Wenn Sie nur einen Ausdruck in hexadezimaler Schreibweise erhalten möchten, verwenden Sie das Format "% a". Dieser ist für Fließkommawerte. –

Antwort

1

%llx bedeutet nicht "Drucken als long long in hex". Es bedeutet das Argument ist (hat Typ) long long. Wenn Sie diese Anforderung verletzen, hat Ihr Programm ein nicht definiertes Verhalten.

Wenn Sie die Darstellung eines double ausdrucken möchten, so etwas wie:

double x; 
uint64_t x_repr; 
memcpy(&x_repr, &x, sizeof x_repr); 
printf("%" PRIx64 "\n", x_repr);