Кажется, что BigInteger
со спецификатором формата x
хочет записать байт за раз.
См. Этот пример:
writeHex(new BigInteger(15));
0f
Как таковой, не стесняйтесь удалять любые дополненные '0'
в начале:
private static void writeHex(BigInteger value)
{
Console.WriteLine(value.ToString("x").TrimStart('0'));
}
Есть ли причина для этого?
Хорошая причина для того, чтобы они реализовали его таким образом, заключается в том, что он все еще корректен и, вероятно, работает лучше в узком цикле, который они используют для реализации ToString
(избегая ветвлений).
Отражатель реализации выглядит так:
StringBuilder builder = new StringBuilder();
byte[] buffer = value.ToByteArray();
// ... A bunch of pre-amble for special cases here,
// though obviously not including the high byte being < 0x10. Then:
while (index > -1)
{
builder.Append(buffer[index--].ToString(str, info));
}
Редактировать
Ну, Бен поднял хорошую мысль. В некоторых из этих примеров вы дали нечетное количество кусочков, так что я думаю, что реализация просто изворотлива:)
Вы все еще можете использовать функцию string.TrimStart
, чтобы обойти эту проблему.