我正在将Guid转换为BigInteger,因此我可以对其进行base62编码。这很好,但是,我可以在BigInterger中得到负数。如何移动BigInteger以使数字为正数。我还需要能够将它移回去,以便我可以转换回Guid。
// GUID is a 128-bit signed integer
Guid original = new Guid("{35db5c21-2d98-4456-88a0-af263ed87bc2}");
BigInteger b = new BigInteger(original.ToByteArray());
// shift so its a postive number?
答案 0 :(得分:2)
注意:对于Base64的url-safe版本,请考虑使用Base64(http://en.wikipedia.org/wiki/Base64#URL_applications)的修改字符集而不是自定义Base62。
我相信你可以先向数组追加0(最高位会使最高字节不包含1)然后如果你真的需要正BigInteger则转换为BigInteger。
答案 1 :(得分:0)
你的意思是base64编码吗?
Convert.ToBase64String(Guid.NewGuid().ToByteArray());
答案 2 :(得分:0)
如果有时会得到负数,则意味着您的GUID值足以填充BigInteger的所有128位,否则BigInteger byte [] ctor正在解释数据。为确保您的字节实际为正,请检查您是否获得&lt; = 16字节(128位)并且最后一个字节的最高有效位(因为它的小端)为零。如果你有<16字节,你可以简单地append a zero byte to your array(再次,因为它是小端而附加,以确保BigInteger ctor将其视为正数。)
答案 3 :(得分:0)
此article我认为它可以为您提供解决方案: 总而言之,如果最后一个字节的最高有效位是1,则将另外一个字节加到0。
FutureWarning