如何使用高字节和低字节?

时间:2011-05-22 20:25:08

标签: c++ byte bytearray bit 16-bit

我试图用2个字节代表32768。对于高字节,我是否使用与低字节相同的值,它将以不同的方式解释它们还是将实际值放入?所以我会提出类似的东西 32678 0或256 0?或者两者都没有?任何帮助表示赞赏。

6 个答案:

答案 0 :(得分:21)

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

从低位和高位取回输入,如下所示:input=low | (high<<8)

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

答案 1 :(得分:5)

字节只能包含0到255之间的值,包括0和255。 32768是0x8000,因此高字节是128而低字节是0。

答案 2 :(得分:0)

32768是0x8000,所以你要把高位字节中的0x80(128)和低位字节中的0。

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

答案 3 :(得分:0)

在little-endian平台上,

32768 in hex是0080。 “高”(在我们的例子中为第二个)字节包含128,而“低”字节包含128。

答案 4 :(得分:0)

试试这个功能。 将Hi_Byte和Lo_Byte传递给函数,它将值返回为Word。

from textwrap import dedent
import types

def lol(code):
    globals_ = {"__builtins__": None}  # no built-ins for safety
    locals_ = {}

    exec(code, globals_, locals_)

    if len(locals_) != 1:
        raise ValueError("code didn't define exactly one item")
    value = locals_.popitem()[1]  # get value of the one item defined
    if type(value) != types.FunctionType:
        raise ValueError("code didn't define a function")

    return value  # return function object that was defined

my_code = dedent("""
    def foo():
        return 'bar'
""")

a = lol(my_code)
print(a())

答案 5 :(得分:0)

指针可以轻松完成此操作,比移位更快,无需处理器数学。

Check this answer

BUT: 如果我理解你的问题,你需要最多32768存储在2个字节,所以你需要2个无符号整数,或1个无符号长整数。 只需将int更改为long,将char更改为int,然后就可以了。