gpt4 book ai didi

python - 如何将Python数字转换为1字节C类型?

转载 作者:行者123 更新时间:2023-11-30 16:58:47 24 4
gpt4 key购买 nike

我在 python 脚本(在我的笔记本电脑上)和 AVR 微 Controller 上运行的 C 程序之间的通信时遇到一些问题。他们通过 UART 进行通信。我的问题是现在我进行了以下设置。

Python发送数据:

data = port.write(struct.pack("b", val))

Python读取数据:

v = struct.unpack('B', d)[0]
print "%s: %d" % ( time.ctime(time.time()), v )

C(AVR)读取数据:

received = (uint8_t) UDR0;

C(AVR)写入数据(回显):

UDR0 = received;

我的问题是这样设置后,我的 python 脚本返回的数字如下:

发送:0 - 31,接收:224 - 255发送:32 - 63 接收:32 - 63发送:62 -95 接收:224 - 255发送:96 - 100 接收:224 - 228

我不明白为什么这些数字会如此匹配,但我怀疑这是因为我的数据类型。我考虑过使用 chr() 和 ord() 来转换字符和从字符转换,但必须有一种更简单(更容易理解)的方法。我开始研究 python 中的 ctypes 并希望使用 c_ubyte 函数,但无法弄清楚如何正确使用它。我对 python 相当陌生。有人对我的逻辑不正确的地方有任何建议吗?

同样,我的猜测是转换和使用有符号与无符号数据类型。

谢谢。

最佳答案

我发现了这个问题。代码是正确的。我的 AVR 板或 UART 模块有问题。当我发送值 0 - 31 时,主板接收到 0b11100000 - 0b11111111。对于 32 - 63,董事会收到 0b00100000 - 0b00111111。对于 64 - 95,董事会收到 0b11100000 - ob11111111。对于 96 - 100,董事会收到 0b11100000 - 0b11100100。

我还不知道为什么我会得到这些值。我觉得很奇怪,3 个最高有效位的翻转方式是这样的。为了暂时解决我的问题,直到我找出问题所在(查看是否是我的 UART 模块),我使用 25 个值的子集,并将我的值增加 4,以获得我想要的 0 - 100 范围。

关于python - 如何将Python数字转换为1字节C类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38558174/

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