开发者

How to use high and low bytes?

开发者 https://www.devze.com 2023-03-08 02:26 出处:网络
I am trying to represent 32768 using 2 bytes. For the high byte, do I use the same values as the low byte and 开发者_开发知识库it will interpret them differently or do I put the actual values? So woul

I am trying to represent 32768 using 2 bytes. For the high byte, do I use the same values as the low byte and 开发者_开发知识库it will interpret them differently or do I put the actual values? So would I put something like 32678 0 or 256 0? Or neither of those? Any help is appreciated.


In hexadecimal, your number is 0x8000 which is 0x80 and 0x00. To get the low byte from the input, use low=input & 0xff and to get the high byte, use high=(input>>8) & 0xff.

Get the input back from the low and high byes like so: input=low | (high<<8).

Make sure the integer types you use are big enough to store these numbers. On 16-bit systems, unsigned int/short or signed/unsigned long should be be large enough.


Bytes can only contain values from 0 to 255, inclusive. 32768 is 0x8000, so the high byte is 128 and the low byte is 0.


Try this function. Pass your Hi_Byte and Lo_Byte to the function, it returns the value as Word.

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


Pointers can do this easily, are MUCH FASTER than shifts and requires no processor math.

Check this answer

BUT: If I understood your problem, you need up to 32768 stored in 2 bytes, so you need 2 unsigned int's, or 1 unsigned long. Just change int for long and char for int, and you're good to go.


32768 is 0x8000, so you would put 0x80 (128) in your high byte and 0 in your low byte.

That's assuming unsigned values, of course. 32768 isn't actually a legal value for a signed 16-bit value.


32768 in hex is 0080 on a little-endian platform. The "high" (second in our case) byte contains 128, and the "low" one 0.

0

精彩评论

暂无评论...
验证码 换一张
取 消