我正面临一个著名的小案子结构包. 你知道吗
情况如下:我有一个带有python薄层包装器的dll。wrapper中的一个python方法接受字节数组作为参数。此字节数组表示特定硬件总线上的寄存器。每个总线具有不同的寄存器宽度,通常为8、16和24位宽(所有情况下对齐方式相同)。你知道吗
当调用这个方法时,我需要将我的值(不管是什么)转换成8/16或24位的字节数组。这样的转换相对容易,8位或16位使用结构包地址:
byteList = struct.pack( '>B', regValue ) # For 8 bits case
byteList = struct.pack( '>H', regValue ) # for 16 bits case
我现在正在寻找使它足够灵活的所有三种情况8/16和24位。我可以用前两行来处理这三个案子,但我觉得很难看。你知道吗
我希望这能奏效:
packformat = ">{0}B".format(regSize)
byteList = struct.pack( packformat, regValue )
但事实并非如此结构包期望有相同数量的参数。你知道吗
你知道如何将寄存器值转换成任意字节数吗?你知道吗
你总是打包无符号的整数,而且只有big endian启动。看看打包时会发生什么:
基本上,该值在开始处用空字节填充。利用这个优势:
如果值太大,现在不会出现异常,但这会极大地简化代码。始终可以添加单独的验证步骤:
演示:
相关问题 更多 >
编程相关推荐