我试图用2个字节代表32768。对于高字节,我是否使用与低字节相同的值,它将以不同的方式解释它们还是将实际值放入?所以我会提出类似的东西 32678 0或256 0?或者两者都没有?任何帮助表示赞赏。
答案 0 :(得分:21)
在十六进制中,您的数字是0x8000,即0x80和0x00。
要从输入获取低字节,请使用low=input & 0xff
并获取高字节,请使用high=(input>>8) & 0xff
。
从低位和高位取回输入,如下所示:input=low | (high<<8)
。
确保您使用的整数类型足以存储这些数字。在16位系统上,unsigned int
/ short
或signed
/ unsigned long
应该足够大。
答案 1 :(得分:5)
字节只能包含0到255之间的值,包括0和255。 32768是0x8000,因此高字节是128而低字节是0。
答案 2 :(得分:0)
32768是0x8000,所以你要把高位字节中的0x80(128)和低位字节中的0。
当然,这是假设无符号值。对于带符号的16位值,32768实际上不是合法值。
答案 3 :(得分:0)
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)
指针可以轻松完成此操作,比移位更快,无需处理器数学。
BUT: 如果我理解你的问题,你需要最多32768存储在2个字节,所以你需要2个无符号整数,或1个无符号长整数。 只需将int更改为long,将char更改为int,然后就可以了。