- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有类型 bytes
的值需要转换为BIT STRING
bytes_val = (b'\x80\x00', 14)
索引零中的字节需要转换为长度由第二个元素(在本例中为 14)指示的位串,并格式化为如下所示的 8 位组。
预期输出 => '10000000 000000'B
另一个例子
bytes_val2 = (b'\xff\xff\xff\xff\xf0\x00', 45) #=> '11111111 11111111 11111111 11111111 11110000 00000'B
最佳答案
格式化的一些组合(下面使用 f-string 但可以通过其他方式完成)和切片怎么样:
def bytes2binstr(b, n=None):
s = ' '.join(f'{x:08b}' for x in b)
return s if n is None else s[:n + n // 8 + (0 if n % 8 else -1)]
B
是什么意思),它会通过您的测试和更多测试:
func = bytes2binstr
args = (
(b'\x80\x00', None),
(b'\x80\x00', 14),
(b'\x0f\x00', 14),
(b'\xff\xff\xff\xff\xf0\x00', 16),
(b'\xff\xff\xff\xff\xf0\x00', 22),
(b'\x0f\xff\xff\xff\xf0\x00', 45),
(b'\xff\xff\xff\xff\xf0\x00', 45),
)
for arg in args:
print(arg)
print(repr(func(*arg)))
# (b'\x80\x00', None)
# '10000000 00000000'
# (b'\x80\x00', 14)
# '10000000 000000'
# (b'\x0f\x00', 14)
# '00001111 000000'
# (b'\xff\xff\xff\xff\xf0\x00', 16)
# '11111111 11111111'
# (b'\xff\xff\xff\xff\xf0\x00', 22)
# '11111111 11111111 111111'
# (b'\x0f\xff\xff\xff\xf0\x00', 45)
# '00001111 11111111 11111111 11111111 11110000 00000'
# (b'\xff\xff\xff\xff\xf0\x00', 45)
# '11111111 11111111 11111111 11111111 11110000 00000'
bytes
开始对象 b
格式化二进制说明符,带有一些额外的格式:0
零填充,8
最小长度' '
加入(连接)格式化的结果作为“分隔符”n
未指定(设置为 None
),否则结果将被裁剪为 n
+ 在 8 个字符组之间添加的空格数。 8
有点硬编码。
int.from_bytes()
.
def bytes2binstr_frombytes(b, n=None, k=8):
s = '{x:0{m}b}'.format(m=len(b) * 8, x=int.from_bytes(b, byteorder='big'))[:n]
return ' '.join([s[i:i + k] for i in range(0, len(s), k)])
int.from_bytes()
基于的解决方案也更快:
for i in range(2, 7):
n = 10 ** i
print(n)
b = b''.join([random.randint(0, 2 ** 8 - 1).to_bytes(1, 'big') for _ in range(n)])
for func in funcs:
print(func.__name__, funcs[0](b, n * 7) == func(b, n * 7))
%timeit func(b, n * 7)
print()
# 100
# bytes2binstr True
# 10000 loops, best of 3: 33.9 µs per loop
# bytes2binstr_frombytes True
# 100000 loops, best of 3: 15.1 µs per loop
# 1000
# bytes2binstr True
# 1000 loops, best of 3: 332 µs per loop
# bytes2binstr_frombytes True
# 10000 loops, best of 3: 134 µs per loop
# 10000
# bytes2binstr True
# 100 loops, best of 3: 3.29 ms per loop
# bytes2binstr_frombytes True
# 1000 loops, best of 3: 1.33 ms per loop
# 100000
# bytes2binstr True
# 10 loops, best of 3: 37.7 ms per loop
# bytes2binstr_frombytes True
# 100 loops, best of 3: 16.7 ms per loop
# 1000000
# bytes2binstr True
# 1 loop, best of 3: 400 ms per loop
# bytes2binstr_frombytes True
# 10 loops, best of 3: 190 ms per loop
关于python字节到位串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60579197/
我需要获取 UInt16 和 UInt64 中的值作为 Byte[]。目前我正在使用 BitConverter.GetBytes,但这种方法每次都会给我一个新的数组实例。 我想使用一种允许我将这些值“
我一定是误解了 CSS 中的某些内容,因为我使用库 ( dat-gui ) 的下拉框正在这样做: 我已经尝试为 dat-gui 容器下面的 div 切换到 position: absolute,这会破
TOHtml 可用于将文件转换为 html,但它也会创建一个新文件。例如,如果原始文件名为 test,vim 将创建一个名为 test.html 的新文件。 有没有一种方法可以就地修改文件,即只将 t
你如何排序 IndexedSeq在斯卡拉的地方? API函数在哪里? 最佳答案 目前没有什么可以就地对它们进行排序。 如果您确实需要,可以转换 IndexedSeq到 Array[AnyRef]并使用
我正在尝试在字符串/对象类型的数据框中的 4 个特定列上用“”填充 NA。我可以在 fillna() 时将这些列分配给一个新变量,但是当我 fillna() inplace 时,基础数据不会改变。 a
我需要将我的测试结果放入一个 csv 文件中进行报告。在我的 python 测试代码中,当我没有值时,我的变量以 python 方式填充为 None。 有人要求我在报告工具的 CSV 文件中将这些替换
在我的网站上,我有一个元素位于上 Angular ,因此当他或她向下滚动时会跟随用户。就像this Fiddle .相反,我想做的是通过在用户滚动时保持不动然后加速回到其固定位置来使其具有更好的跟随效
有没有办法让 Webpack 将 #!/usr/bin/env Node 放在我的文件顶部? 我正在尝试将 CLI 与模块捆绑在一起...仅使用一个配置文件单独导出我的 index.js/cli.js
我想匹配 ArrayList 以便正确的 Burgare 获得正确的位置例如,Burgare6 获得位置 6,Burgare2 获得位置 2,依此类推。 public static void main
如何使用 boost::mpi 1.53 就地全部减少? (这是 CentOS 7 的版本) boost 1.61 有 boost::mpi::inplace_t ( doc ) 但 boost 1.
我有一些外国的 html 并且想用 css 表格来格式化它。不幸的是,html 在“tabular-row-divs”和“tabular-cell-divs”之间包含一个额外的 div。 例子:HTM
我有一张图片、一个标题、一段文字、一个日期和一个来源。我想将图像放在左侧,将来源和日期放在底部。如果文本太多,它们将位于图像下方,这很好。但如果太少。我希望日期和来源位于图像旁边的底部,如下所示:
我有这个程序: #include #include using namespace std; int main() { string inputfile = "input.pdf";
我是一名优秀的程序员,十分优秀!