web-dev-qa-db-fra.com

Comment utiliser les octets hauts et bas?

J'essaie de représenter 32768 en utilisant 2 octets. Pour l'octet haut, est-ce que j'utilise les mêmes valeurs que l'octet bas et il sera interprété différemment ou est-ce que je mets les valeurs réelles? Alors, est-ce que je mettrais quelque chose comme 32678 0 ou 256 0? Ou ni l'un ni l'autre? Toute aide est appréciée.

13
Sterling

En hexadécimal, votre nombre est 0x8000 qui est 0x80 et 0x00. Pour obtenir l'octet de poids faible à partir de l'entrée, utilisez low=input & 0xff et pour obtenir l'octet de poids fort, utilisez high=(input>>8) & 0xff

Récupérez les commentaires des bys bas et hauts comme suit: input=low | (high<<8)

Assurez-vous que les types d'entiers que vous utilisez sont assez gros pour stocker ces nombres. Sur les systèmes 16 bits, unsigned int/short ou signed/unsigned long devrait être suffisamment grand.

18
John McFarlane

Les octets ne peuvent contenir que des valeurs comprises entre 0 et 255. 32768 est 0x8000, donc l'octet haut est 128 et l'octet bas est 0.

32768 est 0x8000, donc vous mettriez 0x80 (128) dans votre octet de poids fort et 0 dans votre octet de poids faible.

Cela suppose des valeurs non signées, bien sûr. 32768 n'est pas réellement une valeur légale pour une valeur signée sur 16 bits.

0
Alnitak

32768 en hex est 0080 sur une plate-forme little-endian. L'octet "haut" (le deuxième dans notre cas) contient 128 octets, et le "bas" un 0.

0
azyoot

Les pointeurs peuvent le faire facilement, sont BEAUCOUP PLUS RAPIDES que les décalages et ne nécessitent aucun calcul de processeur.

Cochez cette réponse

MAIS: Si j'ai bien compris votre problème, vous devez stocker jusqu'à 32 768 bits sur 2 octets. Vous avez donc besoin de 2 intsignés non signés ou d'1 long non signés. Il suffit de changer int pour long et caractère pour int, et votre bien aller.

0
cyberponk

Essayez cette fonction. Passez votre Hi_Byte et votre Lo_Byte à la fonction, elle renvoie la valeur sous forme de Word.

Word MAKE_Word( const BYTE Byte_hi, const BYTE Byte_lo)
{
     return   (( Byte_hi << 8  ) | Byte_lo & 0x00FF );
}
0