将 float32 字节转换为 base64 编码字节

Convert float32 bytes to base64 encoded bytes

我有一个浮点值 16.75 需要将其编码为 base64 二进制文件。

我正在使用网站 https://cryptii.com/pipes/binary-to-base64 作为验证参考。 16.75 编码为 32 位浮点格式导致 01000001 10000110 00000000 00000000 得到 base64 编码值 QYYAAA==

不幸的是,使用 接受的答案仍然导致我得到不同的答案。

xx = base64.encodebytes(struct.pack('<d', 16.75))
print(xx) #b'AAAAAADAMEA=\n'
xx = struct.unpack('<d', base64.decodebytes(xx))
print(xx) #(16.75,)

有人可以指导我哪里出错了吗? post 在评论中提出您的问题 - 会尽量尽早回答。

您 运行 遇到的问题是字节顺序和浮点数大小的差异。

Python 花车是双打。您输入 Cryptii 网站的二进制文件是 float32 表示形式。

要匹配您正在查找的答案,您需要使用 "!f" (big-endian float32)

创建结构
a = base64.encodebytes(struct.pack('!f', 16.75)) 
print(a) # b'QYYAAA==\n'

要让 cryptii 成为 return 您在 python 中使用您的示例创建的答案,您需要使用 "<d" 将浮点数转换为二进制数(little-endian 双):

print(''.join('{:0>8b}'.format(c) for c in struct.pack('<d', 16.75)))
0000000000000000000000000000000000000000110000000011000001000000