每当我使用BigInteger.ToString(“X”)方法将BigInteger值“转换”为HEX时,它会为某些不明原因添加额外的零(对我而言)。例如:
Dim val As New BigInteger
Dim res As New String
val = 604462909807314587353089
res = val.ToString("X")
在这种情况下,res等于:
res: 080000000000000000001
这第一个零是困扰,因为我将这些值传递给某些只允许一定数量的HEX字符的设备。我当然可以使用额外的一行或两行轻松删除它,但鉴于我的程序也是一个巨大的解析循环,我担心这样做会延长执行时间。
知道这是从哪里来的吗? 非常感谢你。 :)
答案 0 :(得分:4)
前导0表示该数字为正数。在有符号整数中,最大位用作符号位,因此它表示负数。
例如:
// Sorry this is in C#
// 0x00 ~ 0x7F is always positive (0~127), no need to add leading 0
// 0x80 ~ 0xFF in signed number would be negative(-128~-1), but in unsigned it will be 128~255
new BigInteger(128).ToString("X") == "080"; // this is positive 128!
new BigInteger(-128).ToString("X") == "80"; // this is negative 128!
请注意,前导0帮助您确定实际的数字。
如果您知道要传递给其他设备的位数,那么我建议实际截断/格式化为特定的数字,例如:ToString(" X20")将始终格式化为20位数。 在您的计算中,前导0应该几乎不会影响任何一个,所以您不必担心它。