18

我正在尝试使用 2 个字节来表示 32768。对于高字节,我是否使用与低字节相同的值,它会以不同的方式解释它们,还是我输入实际值?那么我会输入 32678 0 或 256 0 之类的东西吗?或者那些都不是?任何帮助表示赞赏。

4

6 回答 6

30

在十六进制中,您的数字是 0x8000,即 0x80 和 0x00。要从输入中获取低字节,请使用low=input & 0xff和要获取高字节,请使用high=(input>>8) & 0xff

从低字节和高字节中获取输入,如下所示input=low | (high<<8)

确保您使用的整数类型足够大以存储这些数字。在 16 位系统上,unsigned int/shortsigned/unsigned long应该足够大。

于 2011-05-22T20:37:40.727 回答
5

字节只能包含 0 到 255 之间的值,包括 0 到 255。32768 为 0x8000,所以高字节为 128,低字节为 0。

于 2011-05-22T20:29:14.960 回答
2

指针可以很容易地做到这一点,比移位快得多,并且不需要处理器数学。

检查这个答案

但是:如果我理解您的问题,您最多需要 32768 存储在 2 个字节中,因此您需要 2 个无符号整数或 1 个无符号长整数。只需将 int 更改为 long 并将 char 更改为 int,就可以了。

于 2017-01-18T23:27:13.553 回答
2

试试这个功能。将您的 Hi_Byte 和 Lo_Byte 传递给函数,它以 Word 形式返回值。

WORD MAKE_WORD( const BYTE Byte_hi, const BYTE Byte_lo)
{
     return   (( Byte_hi << 8  ) | Byte_lo & 0x00FF );
}
于 2016-05-07T13:38:44.590 回答
0

32768 是 0x8000,因此您可以将 0x80 (128) 放在高字节中,将 0 放在低字节中。

当然,这是假设无符号值。32768 实际上不是带符号的 16 位值的合法值。

于 2011-05-22T20:29:57.317 回答
-1

十六进制的 32768 在 little-endian 平台上是 0080。“高”(在我们的例子中是第二个)字节包含 128,“低”字节包含 0。

于 2011-05-22T20:31:44.897 回答