将 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
我有一个浮点值 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