Riesco a vedere come potresti fare riferimento al prefisso 0x
come a "segno". significa che le seguenti cifre sono esadecimali. Ma nella programmazione, usiamo quasi universalmente la parola "segno" per riferirsi a qualcosa che indica se un numero è positivo o negativo. In un valore numerico memorizzato, di solito c'è un bit che indica se un numero è negativo. Nel testo del programma, possiamo scrivere +42
per indicare un numero intero positivo e -42
per indicare un numero intero negativo; il carattere +
o -
è il segno . (Sto soffermando su alcuni dettagli riguardanti il complemento a 2 e altre rappresentazioni, e problemi riguardanti 0
, anche +
e -
sono in realtà operatori, non parte delle costanti intere. .)
Quindi riferirsi a qualcosa di diverso da un indicatore positivo o negativo come un "segno" è destinato a causare confusione. Il 0x
in un valore letterale esadecimale come 0xfa0
può essere definito come prefisso , non come "segno".
Il nome della funzione dechex
di PHP, documentato qui , è in realtà un po 'fuorviante. Prende un argomento intero senza segno e restituisce una stringa contenente la rappresentazione esadecimale leggibile dall'uomo di quell'argomento. L'argomento non è decimale ; è quasi certamente memorizzato in binario. Pensiamo agli interi come decimali perché di solito li scriviamo in questo modo, ma in realtà i valori interi possono essere scritti in decimali, ottali, esadecimali o come espressioni complicate, il che si traduce in un valore binario memorizzato. Non converte decimale in esadecimale; converte un numero in esadecimale - un numero che può essere risultato dalla conversione di un valore letterale decimale nel codice sorgente PHP in un numero intero binario memorizzato.
Per quanto riguarda il motivo per cui il risultato di dechex()
non include il prefisso 0x
, la documentazione non dice, ma probabilmente è solo perché è più conveniente in questo modo. Se desideri una stringa con un prefisso 0x
, è banalmente facile aggiungerla tu stesso (e decidere se vuoi 0x
o 0X
). Se dechex()
ha restituito una stringa con il prefisso e tu non l'hai voluta, dovresti rimuoverla.
Questo piccolo programma dimostra questi punti:
#!/usr/bin/php
<?php
// Various arguments to dechex (decimal, octal, hexadecimal):
echo "dechex(12345678) = \"", dechex(12345678), "\"\n";
echo "dechex(012345678) = \"", dechex(012345678), "\"\n";
echo "dechex(0xDEADBEEF) = \"", dechex(0xdeadbeef), "\"\n";
echo "dechex(4*5) = \"", dechex(4*5), "\"\n";
echo "With a prefix: \"0x", dechex(4*5), "\"\n";
// Another approach using sprintf():
echo sprintf("0x%x", 1234), "\n";
// ... or printf:
printf("0X%X\n", 1234);
?>
Ecco l'output:
dechex(12345678) = "bc614e"
dechex(012345678) = "53977"
dechex(0xDEADBEEF) = "deadbeef"
dechex(4*5) = "14"
With a prefix: "0x14"
0x4d2
0X4D2