gpt4 book ai didi

python - 将 C++ 中的数组操作转换为 Python

转载 作者:行者123 更新时间:2023-11-28 02:15:48 26 4
gpt4 key购买 nike

我需要一些帮助。我是 python 的新手。我正在尝试完成以下在 python 中用 C++ 编写的内容。这是我所拥有的:

C++:

uint16_t value = (ReadData[1] << 8 | ReadData[2]);
int num = (short) value;
int total = ((0.89*num)+48.31);

python :

ReadData = [0]*6
arr = bytes(ReadData)
value = arr2[0:3]

不确定如何取出像这样吐出的数组:b'\xff\xff\xce' 到一个带符号的 int。

提前致谢。

最佳答案

由于您使用的是 bytesbytes 文字,我猜您使用的是 Python 3,在这种情况下,您有一个更好的通用选项来转换任意将字节运行到 int 中。 Python 3 有一个惊人的一体式转换器。对于您的示例案例:

>>> int.from_bytes(b'\xff\xff\xce', 'big', signed=True)
-50

它可以扩展到巨大的尺寸,并且运行速度比其他任何可用的都快。

如果您不使用 Python 3,它会稍微丑一些,但仍然相当快:

import binascii

def int_from_bytes(b):
x = int(binascii.hexlify(b), 16)
mask = 1 << (len(b) << 3) - 1
if x & mask:
x -= mask << 1
return x

当您这样做时,它会得到与内置 Python 3 相同的结果:

>>> int_from_bytes(b'\xff\xff\xce')
-50

关于性能的注意事项:一个预编译的 struct.Struct 将获胜,毫无疑问,如果它真的像一个填充字节后跟一个带符号的 short 一样简单,不可变长度废话。在这种情况下,您将使用以下内容预编译 Struct:

unpacker = struct.Struct('>xh').unpack

然后你可以像这样使用它:

x, = unpacker(b'\xff\xff\xce')

结尾的逗号很重要(Struct.unpack 在这种情况下返回一个长度为 1 的元组,并分配给 x, 将单个值解包到 x 最有效的方法。

关于python - 将 C++ 中的数组操作转换为 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34074196/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com