c - Python 对字节的解释。 (C 内存复制)

标签 c python-3.x memcpy

我是Python新手。我尝试用 python 重写一些 C++ 代码,我从串行端口获取数据(我们使用我们自己的协议(protocol)),并且需要将字节转换为 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 的原因 有时值可以是 float ,而不是我只是使用此函数中的 long 并执行 memcpy 来重新解释字节

{
        float res;
        memcpy(&res,&longValue,sizeof(float)); 
        result=res;
        break;
}

在 python 中,我从 C++ lib 中获取无符号字符列表(在 python 中显然是 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

但是如何获得 float 呢?我读到了有关 byteArray 的内容,但它是字符串表示形式,而 python 仅使用双标准来表示浮点值。我唯一想到的就是将此函数附加到 c++ lib 中,但我想必须是其他方式。

最佳答案

工作量太大。

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

关于c - Python 对字节的解释。 (C 内存复制),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30611038/

相关文章:

c - memcpy() 将整数值复制到字符缓冲区

c - 我执行的每个操作,Visual Studio 都会打开 'save file as' 对话框

python - 在 python 中使用多个异常

c - 数据类型范围有限

python - 如何获取python矩阵中特定项目的索引

performance - 新项目 Python 3x PostgreSQL 9x 和 pg8000 1x DBAPI?

copy_to_user 与 memcpy

c - 使用 memcpy 和 void* 交换函数

java - 一个资深的 Java 程序员应该从哪里开始才能掌握 C?

c - vsnprintf 为什么会导致格式字符串漏洞