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.
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.
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.
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.
Les pointeurs peuvent le faire facilement, sont BEAUCOUP PLUS RAPIDES que les décalages et ne nécessitent aucun calcul de processeur.
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.
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 );
}