我在根据掩码分配的13位中设置一个值(PID)。。我试图在第4位设置一个标志,同时在13位掩码中保留原始值。。你知道吗
想法??你知道吗
header = 0x0
pid_mask = 0x1fff
TP_mask = 0x2000
PID = 0x1FFe #8190
TP = 0x1
header = ((header & pid_mask) | (PID << 8))
print(bin(header))
print(hex(header))
print(int(header))
header = ((header & TP_mask) | (TP << 12))
print(bin(header))
print(hex(header))
print(int(header))
这是我的输出
这部分很好(第一次打印语句)
0b111111111111000000000
0x1ffe00
2096640
这部分我希望是上面+额外的位翻转(第二次打印语句)
0b11000000000000
0x3000
12288
更新
我是个十足的木偶,多亏了@Lesiak的帮助
这是最新的代码
def createHeader(pid,tei,pusi,tranportPriority,tsc,afc,cc):
header = pid << 8
if tei == 1:
header = header | (0x1 << (22 + 1))
print(bin(header))
if pusi == 1:
header = header | (0x1 << (21 + 1))
print(bin(header))
if tranportPriority == 1:
header = header | (0x1 << (8 + 13))
print(bin(header))
header = header | (tsc << 6)
print(bin(header))
header = header | (afc << 4)
print(bin(header))
header = header | (cc << 0)
print(bin(header))
print(hex(header))
return header
header = (createHeader(pid,1,1,1,0x1,0x1,0x2))
我唯一的问题是必须切掉最后一个字节头[1:4],因为它返回4个字节而不是3个字节。不知道为什么。。。。你知道吗
您正在从头开始构造一个新数据包。 使用位掩码是没有意义的。 只需将适当的数据包块放在各自的位置。要确定正确的位置,请检查您的协议定义并计算字段中的位数以填充低有效位。你知道吗
在相反的情况下,您应该使用位掩码:您收到一个数据包并希望从中提取数据。你知道吗
更新
我是如何实现PID的8位移位和TP的21位移位的? 看看协议定义: PID后面有8位(它们位于较低有效位上)
对于TP:
相关问题 更多 >
编程相关推荐