在 Java 中,我可以将 a 编码BigInteger
为:
java.math.BigInteger bi = new java.math.BigInteger("65537L");
String encoded = Base64.encodeBytes(bi.toByteArray(), Base64.ENCODE|Base64.DONT_GUNZIP);
// result: 65537L encodes as "AQAB" in Base64
byte[] decoded = Base64.decode(encoded, Base64.DECODE|Base64.DONT_GUNZIP);
java.math.BigInteger back = new java.math.BigInteger(decoded);
在 C# 中:
System.Numerics.BigInteger bi = new System.Numerics.BigInteger("65537L");
string encoded = Convert.ToBase64(bi);
byte[] decoded = Convert.FromBase64String(encoded);
System.Numerics.BigInteger back = new System.Numerics.BigInteger(decoded);
如何将 Python 中的长整数编码为 Base64 编码的字符串?到目前为止,我所尝试的结果与其他语言的实现不同(到目前为止,我已经在 Java 和 C# 中尝试过),特别是它产生了更长的 Base64 编码字符串。
import struct
encoded = struct.pack('I', (1<<16)+1).encode('base64')[:-1]
# produces a longer string, 'AQABAA==' instead of the expected 'AQAB'
当使用此 Python 代码生成 Base64 编码的字符串时,生成的 Java 中的解码整数(例如)会生成而不是16777472
预期的65537
. 首先,我错过了什么?
其次,我必须手动弄清楚要使用的长度格式是什么struct.pack
;如果我试图编码一个长数字(大于(1<<64)-1
)'Q'
格式规范太短而无法容纳表示。这是否意味着我必须手动进行表示,或者该struct.pack
函数是否存在未记录的格式说明符?(我不是被迫使用struct
,但乍一看它似乎可以满足我的需要。)