我正在尝试使用 2 个字节来表示 32768。对于高字节,我是否使用与低字节相同的值,它会以不同的方式解释它们,还是我输入实际值?那么我会输入 32678 0 或 256 0 之类的东西吗?或者那些都不是?任何帮助表示赞赏。
6 回答
在十六进制中,您的数字是 0x8000,即 0x80 和 0x00。要从输入中获取低字节,请使用low=input & 0xff
和要获取高字节,请使用high=(input>>8) & 0xff
。
从低字节和高字节中获取输入,如下所示input=low | (high<<8)
:
确保您使用的整数类型足够大以存储这些数字。在 16 位系统上,unsigned int
/short
或signed
/unsigned long
应该足够大。
字节只能包含 0 到 255 之间的值,包括 0 到 255。32768 为 0x8000,所以高字节为 128,低字节为 0。
指针可以很容易地做到这一点,比移位快得多,并且不需要处理器数学。
但是:如果我理解您的问题,您最多需要 32768 存储在 2 个字节中,因此您需要 2 个无符号整数或 1 个无符号长整数。只需将 int 更改为 long 并将 char 更改为 int,就可以了。
试试这个功能。将您的 Hi_Byte 和 Lo_Byte 传递给函数,它以 Word 形式返回值。
WORD MAKE_WORD( const BYTE Byte_hi, const BYTE Byte_lo)
{
return (( Byte_hi << 8 ) | Byte_lo & 0x00FF );
}
32768 是 0x8000,因此您可以将 0x80 (128) 放在高字节中,将 0 放在低字节中。
当然,这是假设无符号值。32768 实际上不是带符号的 16 位值的合法值。
十六进制的 32768 在 little-endian 平台上是 0080。“高”(在我们的例子中是第二个)字节包含 128,“低”字节包含 0。