我想出了这个符合ID3标记规范的“魔术字符串”:
ID3v2标签大小用四个字节编码,其中最高有效位(第7位)在每个字节中设置为零,总共28位。忽略零位,因此257字节长的标记表示为$ 00 00 02 01。
>>> hex_val = 0xFFFFFFFF
>>> str.format('0b{0:07b}{1:07b}{2:07b}{3:07b}', ((hex_val >> 24) & 0xEF),
((hex_val >> 16) & 0xEF),
((hex_val >> 8) & 0xEF),
((hex_val >> 0) & 0xEF))
'0b11101111111011111110111111101111'
为什么不相等:
'0b11111111111111111111111111111111'
如果有人关心,这似乎有效:
>>> int(str.format('0b{0:07b}{1:07b}{2:07b}{3:07b}', ((hex_val >> 24) & 0xFE),
((hex_val >> 16) & 0xFE),
((hex_val >> 8) & 0xFE),
((hex_val >> 0) & 0xFE)), 2)
答案 0 :(得分:2)
我认为你混淆了和/或操作。
答案 1 :(得分:1)
抱歉让我的7s和Es迷茫
更正后的代码:
>>> str.format('0b{0:07b}{1:07b}{2:07b}{3:07b}', ((hex_val >> 24) & 0x7F),
((hex_val >> 16) & 0x7F),
((hex_val >> 8) & 0x7F),
((hex_val >> 0) & 0x7F))
答案 2 :(得分:1)
它不等于所有的,因为你使用&
运算符屏蔽了第4位!