【发布时间】:2021-11-11 19:45:08
【问题描述】:
Pythonstruct库有一堆格式字符串对应一个ctype("h":int16,"H":uint16)。
有没有一种简单的方法可以从格式字符串(例如"h"、"H" 等)到可能值的范围(例如-32768 到32767、0 到65535 等)?
我看到struct 库提供了calcsize,但我真正想要的是calcrange 之类的东西。
是否有内置解决方案,或者我忽略的优雅解决方案?我也对第三方库开放。
我在下面做了一个 DIY calcrange,但它只涵盖了有限数量的可能格式字符串,并且做了一些不可概括的假设。
def calcrange(fmt: str) -> Tuple[int, int]:
"""Calculate the min and max possible value of a given struct format string."""
size: int = calcsize(fmt)
unsigned_max = int("0x" + "FF" * size, 16)
if fmt.islower():
# Signed case
min_ = -1 * int("0x80" + "00" * (calcsize(fmt) - 1), 16)
return min_, unsigned_max + min_
# Unsigned case
return 0, unsigned_max
【问题讨论】: