【发布时间】:2021-08-23 13:07:39
【问题描述】:
我需要进行 PractRand 测试。它需要:
“PractRand 仅支持对打包二进制数据作为输入进行测试。你不能给它 ASCII 0 和 1 或 ASCII 十六进制或任何每字节没有 8 个随机位的东西。”
http://pracrand.sourceforge.net/Tests_overview.txt
我有 128 位数字,我需要将其导出到这样的另一个程序:
python3 mygenerator.py | ./RNG_test 标准输入
然后 PractRand 可以进行测试。
这个:
binary = bin(number)[2:].zfill(128)
print(binary,end='')
不起作用。这个:
split=[(number >> x) & 0xFFFFFFFF for x in reversed(range(0, 128, 32))]
binary = struct.pack('qqqq', split[0], split[1], split[2], split[3])
print(binary,end='')
不起作用(我正在拆分数字,因为 'q' 格式是 32 位)。甚至可以输出打包的二进制数据,而不是 ASCII 0 和 1 或 ASCII 十六进制或 Python 中每个字节没有 8 个随机位的其他任何东西?我真的怀疑它,虽然我知道它可以用 C++ 完成。
【问题讨论】:
-
我认为 print 仅适用于字符串数据类型。您是否尝试过使用 sys.stdout ?
sys.stdout.write(binary)我觉得不错 -
@MathisGerma 我有错误:TypeError: write() 参数必须是 str,而不是字节。并且使用“binary = bin(number)[2:].zfill(128)”它仍然无法正常工作。我的意思是生成器在 C++ 中通过了所有测试,在 Python 中没有通过(所以我认为它必须是数据格式的问题,PractRand 将其读取为 ASCII“1”和“0”之类的)。
标签: python binary-data