gpt4 book ai didi

Python 按位运算符,对现有变量进行更改

转载 作者:行者123 更新时间:2023-12-01 07:02:35 25 4
gpt4 key购买 nike

我正在根据掩码分配的 13 位中设置一个值(PID)。我正在尝试在第 4 位上设置一个标志,并将原始值保留在 13 位掩码中。

enter image description here

想法??

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))

我遇到的唯一问题是必须切掉最后一个字节 header [1:4],因为它返回 4 个字节而不是 3 个。不知道为什么......

最佳答案

您正在从头开始构建一个新数据包。为此使用位掩码是没有意义的。只需将数据包的适当 block 放在各自的位置即可。要确定正确的位置,请检查您的协议(protocol)定义并计算填充较低有效位的字段中的位数。

PID =       0x1FFe #8190
TP = 0x1

header = PID << 8

print(bin(header))
print(hex(header))
print(int(header))

header = header | (TP << (8 + 13))


print(bin(header))
print(hex(header))
print(int(header))

您应该在相反的情况下使用位掩码:您收到一个数据包并希望从中提取数据。

更新

我如何达到 PID 的 8 位移位和 TP 的 21 位移位?看一下协议(protocol)定义:PID 之后有 8 位(它们位于较低有效位)

  • 4 表示连续性计数器
  • 2 用于适应字段控制
  • 2 用于传输加扰控制

对于TP:

  • 上面列表中的 8 位
  • 13 位 PID

关于Python 按位运算符,对现有变量进行更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58573613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com