- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
作为序言,我使用 python 3 和位串库。
因此 Arinc429 字是 32 位数据字。
位 1-8 用于存储标签。比如说我想要单词设置纬度,根据标签文档,设置纬度设置为八进制
041
我可以通过以下方式在 python 中对此进行建模:
label = BitArray(oct='041')
print(label.bin)
>> 000100001
接下来的两位可用于发送源,或通过提供设备 ID 来扩展标签。设备 ID 以十六进制给出,我希望使用的是
002
再次,我将其添加到一个新的 BitArray 对象并将其转换为二进制
>> 000000010
接下来是数据字段,范围为 11-29 位。假设我想将纬度设置为伦敦的大致区域 (51.5072)。这就是我陷入困境的地方,因为 float 只能是 32/64 位长。
这个词还有另外两个部分,但在我去那里之前,我只是想知道,我是否走在正确的轨道上,或者偏离了你将如何构建这样一个词?
谢谢。
最佳答案
我认为您的方向是正确的,但您需要了解或决定数据字段的格式。
如果您想要表示 float 的 19 位在某处记录为 float ,那么请查看如何完成转换(因为这根本不是 float 的标准位数)。如果这些位是自由格式的,并且您可以选择编码和解码,那么只需选择合适的内容即可。
有一个偶尔使用的 16 位 float 标准,但如果您只想表示纬度,我会选择更简单的东西。由于它只能得到 0 到 360 之间的值,只需将其缩放为 0 到 2^19 之间的整数并存储该整数。
因此 51.5072 变为 (51.5072/360*(2**19)) = 75012
然后将其存储为无符号整数
> latitude = BitArray(uint=75012, length=19)
这将为您提供大约 0.0007 度的分辨率,这是您所能期望的最佳分辨率。要转换回来:
> latitude.uint*360.0/2**19
51.50665283203125
关于python - ARINC429 构词法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29238346/
我是一名优秀的程序员,十分优秀!