sto leggendo attraverso una libreria (github.com/adduc/phpmodbus) e c'è questa funzione per la conversione di numero intero a stringa little-endian o big-endian di byte:Questa conversione di endianness è corretta?
private static function endianness($value, $endianness = 0) {
if ($endianness == 0)
return
self::iecBYTE(($value >> 8) & 0x000000FF) .
self::iecBYTE(($value & 0x000000FF)) .
self::iecBYTE(($value >> 24) & 0x000000FF) .
self::iecBYTE(($value >> 16) & 0x000000FF);
else
return
self::iecBYTE(($value >> 24) & 0x000000FF) .
self::iecBYTE(($value >> 16) & 0x000000FF) .
self::iecBYTE(($value >> 8) & 0x000000FF) .
self::iecBYTE(($value & 0x000000FF));
}
La funzione iecBYTE
è solo chr($value & 0xFF)
.
Ora forse sono spessa, ma la stringa little-endian sembra sbagliata.
Ad esempio, con 0xAABBCCDD
, otterresti {CC}{DD}{AA}{BB}
.
Ho persino cercato su Wikipedia. Non dovrebbe essere {DD}{CC}{BB}{AA}
?
Il codice funziona, ma questo mi confonde davvero. È giusto e lo capisco in modo errato?
Cosa intendi con? Potrebbe forse essere "funzionante" ma semplicemente non funziona correttamente? – imtheman
Forse ho frainteso ciò che sta facendo il metodo, non sono sicuro. Il metodo è usato parecchio nella libreria e funziona correttamente. – MightyPork