python - 如何只读取前两个数字? python +串口

标签 python c uart

我想在笔记本电脑和模块之间进行通信。为此,我创建了一个 python 文件,它将一些数据包发送到 UART,它必须读取它们。 我有一个创建数据包的 python 脚本(笔记本电脑):

SOF= '24'
SEND_PLAINTEXT= '72'
SEND_KEY  ='73'
RECEIVE_CIPHERTEXT='74'
SIZE_OF_FRAME= '10'
for a in range (0,1):

   line_array=lines[a]
   plaintxt_16b=line_array[0:32]
   plaintext= '24'+'72'+'32'+plaintxt_16b
   ser.write (plaintext.encode())

最终数据包是247232ccddeeff8899aabb4455667700112233

UART 在c: 中使用这几行代码读取数据包

uint8_t rx_buffer[38];
int rx_length = dev_uart_ptr->uart_read(rx_buffer, 38);

if (rx_length <38)
{
    printf( rx_buffer);
}

我只需要读取前两个数字即可测试它是否是帧的开头。因此,我更改了我的代码:

uint8_t rx_buffer[2];
int rx_length = dev_uart_ptr->uart_read(rx_buffer,2);

if (rx_length <2)
{
    printf( rx_buffer);
}

问题是显示的数字是33,尽管我想读24,如果你能帮助我,我将不胜感激。

最佳答案

这一行plaintext= '24'+'72'+'32'+plaintxt_16b 好像是从右到左执行的。所以缓冲区中的第一件事将是 plaintxt_16b,然后是其余的。

数据包247232ccddeeff8899aabb4455667700112233中的字节顺序也是从右到左。所以第一个字节(0 的索引)是0x33

18.| 17.| 16.| 15.| 14.| 13.| 12.| 11.| 10.| 9. | 8. | 7. | 6. | 5. | 4. | 3. | 2. | 1. | 0.
---------------------------------------------------------------------------------------------
24 | 72 | 32 | cc | dd | ee | ff | 88 | 99 | aa | bb | 44 | 55 | 66 | 77 | 00 | 11 | 22 | 33

尝试以下操作:

plaintext= plaintxt_16b + '32' + '72' + '24'

并保持 UART 代码不变。

关于python - 如何只读取前两个数字? python +串口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40804569/

相关文章:

python - ValueError:选项名称已添加 pytest

javascript - AJAX 和 DJANGO 形式

c - 逐字节读取串口数据

c - microblaze 和 vhdl 之间如何通信?

c - 多个无关进程同步UART

python - 当项目解释器设置为 conda 且 conda 未提供/列出包时,如何在 PyCharm 中安装包?

python - pipenv 和 pyinstaller 没有打包依赖项

c - C中删除左子树节点(二叉搜索树)

c - 流缓冲区大小小于输入流,但没有立即段错误

c - 如果全局变量的值在函数中更新,它们的值是否会发生变化?