Python解释字节。 (C memcpy)

时间:2015-06-03 04:46:33

标签: c python-3.x memcpy

我是python的新手。我尝试在python中重写一些c ++代码,我从串口获取数据(我们使用自己的协议)并需要在C ++中将字节转换为值我使用类似这样的东西(小端字节但我们可以获得自定义起始位和位长度)

long getLong(size_t startBit, size_t countBit, unsigned char* data)
{
    long lResult = 0L;
    long L1;
    for (i = 0; i < countBit; i++)
    {
        L1 = long(data[(i+startBit)/8] >> ((i+startBit)%8)) & 1L;
        lResult = (lResult & ~(1L << i)) | (L1 << i);
    }
    return lResult;
}

值不能超过4个字节,这就是我使用long的原因 有时值可以是浮点数,而不是我从这个函数中使用long并执行memcpy来重新解释字节

{
        float res;
        memcpy(&res,&longValue,sizeof(float)); 
        result=res;
        break;
}
在python中的

我从C ++ lib获取unsigned char列表(在python中obviosly int) 并且我可以通过按位运算获得与c ++相同的长值

def _bytes_to_val(self, byte_list, start_bit, count_bit):
    result=0
    for i in range(0,count_bit):
        val = (byte_list[(i+start_bit)//8] >> ((i+start_bit)%8)) & 1
        result = (result & ~(1 << i)) | (val << i)
    return result

但如何浮动?我读了一下byteArray,但它是字符串表示,而python只使用double standart表示浮点值。只有想到我才将此函数附加到c ++ lib,但我认为必须是其他方式。

1 个答案:

答案 0 :(得分:3)

工作太多了。

>>> struct.unpack('i', b'\xdb\x0fI@')
(1078530011,)
>>> struct.unpack('f', b'\xdb\x0fI@')
(3.1415927410125732,)