Permettez-moi de commencer par le problème:et signe
def word(byte1 : Byte, byte2 : Byte, byte3 : Byte, byte4: Byte) : Int = {
((byte4 << 0)) | ((byte3 << 8)) | ((byte2 << 16)) | ((byte1 << 24))
}
Le but ici est assez simple. Compte tenu de 4 octets, placez-les dans un Int
.
Le code ci-dessus ne fonctionne pas car il semble que l'opérateur de changement tente de préserver le signe. Par exemple, ceci:
word(0xFA.toByte, 0xFB.toByte, 0xFC.toByte, 0xFD.toByte).formatted("%02X")
Produit FFFFFFFD
quand je me serais attendu à FAFBFCFD
.
Faire le plus petit problème:
0xFE.toByte << 8
Produit -2 en complément de deux, pas 0xFE00.
Comment puis-je faire un changement sans les problèmes de signe?
Pouvez-vous donner un exemple du problème de la '' fonction word''? Est-ce un problème avec la mise en œuvre actuelle? –
@JeanLogeart la fonction 'word' fonctionne réellement comme je le veux. Ma question est de savoir comment je peux l'écrire sans avoir à faire le '& 0x000000FF' et' & 0x0000FF00' ... pour dépouiller le signe entreprise drôle. – vcsjones
Curieusement, il y a un opérateur '>>>' qui ressemble à ce que je veux, mais pas d'opérateur '<<<'. – vcsjones