Czytam poprzez biblioteki (github.com/adduc/phpmodbus) i jest to funkcja konwersji całkowitą do little-endian lub big-endian ciąg bajtów:Czy ta konwersja endianizmu jest poprawna?
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));
}
Funkcja iecBYTE
tylko chr($value & 0xFF)
.
Teraz może jestem gruby, ale sznur drobno-endyjski wygląda źle.
Na przykład z 0xAABBCCDD
otrzymasz {CC}{DD}{AA}{BB}
.
Sprawdziłem nawet to na Wikipedii. Czy nie powinien to być {DD}{CC}{BB}{AA}
?
Kod działa jednak, co bardzo mnie wprawia w zakłopotanie. Czy to prawda i rozumiem to niepoprawnie?
Co masz na myśli, mówiąc, że działa? Czy to może być "działa", ale po prostu nie działa poprawnie? – imtheman
Może źle zrozumiałem, co robi metoda, nie jestem pewien. Ta metoda jest dość często używana w bibliotece i działa poprawnie. – MightyPork