我有一个n字节的存储空间(在我的情况下是QByteArray
Qt,但我认为这个问题更普遍)。
我有一个类可以对该存储进行操作,并在该位字段的任何位位置存储不同类型的数据类型。它以大端或小端顺序执行此操作,具体取决于参数。
到目前为止,没有出现任何问题。我通过这种构造的位字段在 can 总线上交换数据。不,我正在实现以位为单位存储任意长度的值(只要它们适合)。
这对于小端值很容易,因为我可以简单地修剪前导零,当涉及到负数时也可以修剪前导零。
但是,当我考虑如何正确处理大端值时,我有点困惑如何正确打包这些值。
例如,假设我有位存储0bXXXXXXXXXXXXXXXX
并且我想将值存储0x0123
在位 offset 4
,占用 9 位:
在 little endian 中,我只是将结果0b100100011
写入我的存储:0bXXX100100011XXXX
在大端,我最终得到了 value 0x2301
。打包该值的正确方法是我在第一个非零字节(从右侧)中修剪零以适合 9 位吗?
因此,这将导致0x47
最终的存储布局为0bXXX001000111XXXX
.
这是正确的方法吗?
提前致谢。