【问题标题】:Python: How to make integers from a stream of character data?Python:如何从字符数据流中生成整数?
【发布时间】:2014-09-24 11:12:24
【问题描述】:

在我的项目中,我有一个特殊的处理器,它发送 12 个字节,在我的 PC 上,我有一个 python 脚本,它将这 12 个字节读入list。我将收到的一个这样的数据包粘贴到下面的列表中:

packet1 = [255, 253, 99, 0, 19, 207, 0, 31, 25, 255, 249, 21]

我必须将每三个元素(字节)组合起来,以产生有意义的值。所以,当我成功组合所有它们时,我应该有 4 个整数。

例如,当我组合列表255, 253, 99 的前三个值时,我应该得到-699没错,我需要它作为有符号整数。

我在 C 程序中这样做的方式是这样的:

uint8_t x = 255;
uint8_t y = 253;
uint8_t z = 99;

int convert(uint8_t x, uint8_t y, uint8_t z)
{
    int result = (x << 24) + (y << 16) + (z << 8);
    result = result >> 8;
    return result;
}

通过将xyz 左移8 并将它们全部右移8,并将结果捕获到一个整数数据格式变量中,我正在制作确保我得到一个签名值。

如何在 Python 中实现这个效果?

救命!

谢谢。

【问题讨论】:

    标签: python python-2.7 char integer type-conversion


    【解决方案1】:

    你可以试试这个

    >>> import struct
    >>> a = struct.pack('BBBB', 255, 253, 99, 0)
    >>> b = struct.unpack('>i', a)
    >>> b[0] / 256
    -669
    

    你可以使用小端。

    >>> a = struct.pack('<BBBB',  0, 99, 253, 255)
    >>> b = struct.unpack('<i', a)
    >>> b[0] / 256
    -669
    

    【讨论】:

    • 谢谢夜景。我需要了解这个结构包。
    猜你喜欢
    • 2010-11-12
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 2014-01-14
    • 2012-02-08
    • 2016-05-06
    • 1970-01-01
    • 2016-01-29
    相关资源
    最近更新 更多