Comment échanger l'endian-ness (ordre des octets) d'une variable en javascript
Je suis de la réception et de l'envoi d'une représentation décimale de deux little endian numéros. Je voudrais:
- un décalage variable de 8 bits à gauche
- OU leur
- décalage d'un nombre variable de bits
- créer 2 8 bits des nombres représentant la première et la deuxième moitié de la 16 bits.
javascript (selon https://developer.mozilla.org/en/JavaScript/Reference/Operators/Bitwise_Operators) utilise big endian représentation lors du passage de...
endianness est un peu étranger à moi (je suis à 90% sûr que mon étapes indiquées sont ce que je veux.) si la permutation est un peu vertigineux. s'il vous plaît aider! Je n'ai vraiment besoin de savoir comment faire pour inverser l'ordre d'une manière efficace. (Je ne peux que penser à l'aide d'une boucle for sur les méthodes toString() valeur de retour)
source d'informationauteur griotspeak
Vous devez vous connecter pour publier un commentaire.
Explication:
val
est, par exemple,0xAABB
.val
pour obtenir le LSB par&
ing avec0xFF
: le résultat est0xBB
.0xBB00
.val
De 8 bits vers la droite: le résultat est0xAA
(LSB a "chuté" la droite).&
ing avec0xFF
: le résultat est0xAA
.|
ing ensemble:0xBB00 | 0xAA
est0xBBAA
.Explication:
val
est, par exemple,0xAABBCCDD
.val
pour obtenir le LSB par&
ing avec0xFF
: le résultat est0xDD
.0xDD000000
.val
pour obtenir le deuxième octet par&
ing avec0xFF00
: le résultat est0xCC00
.0xCC0000
.val
De 8 bits vers la droite: le résultat est0xAABBCC
(LSB a "chuté" la droite).&
ing avec0xFF00
: le résultat est0xBB00
.val
24 bits vers la droite: le résultat est0xAA
(tout sauf le MSB a "chuté" la droite).&
ing avec0xFF
: le résultat est0xAA
.|
ing ensemble:0xDD000000 | 0xCC0000 | 0xBB00 | 0xAA
est0xDDCCBBAA
.Utiliser le << (décalage de bits) de l'opérateur. Ex: 1 << 2 == 4.
Je pense vraiment que le sous-jacent de la mise en œuvre de JavaScript, utilisez ce que endianess la plate-forme est en cours d'exécution à l'aide. Puisque vous ne pouvez pas accéder directement à la mémoire en JavaScript, vous n'aurez plus jamais à vous inquiéter de la façon dont les nombres sont représentés physiquement dans la mémoire. Le décalage de bits des valeurs entières donnent toujours le même résultat, peu importe l'endianess. Vous ne voyez une différence au niveau de l'individu octets en mémoire à l'aide de pointeurs.
Une telle fonction peut être utilisée pour modifier l'endianness en js: