Я вижу, что с версии Brave 5.6.0 существует spanIdString()
, который Returns the hex representation of the span's ID
.
. Для внутреннего использования используется * 1010.* в HexCodec
.Это имеет текущую форму начиная с версии 4.9.0
, насколько я могу судить.До этого метод существовал с версии 4.0.0
, но в другой форме.Это метод public
, и вы можете использовать его, однако с осторожностью, поскольку, как намекает название пакета, он не является публичным API, и я ожидаю, что его можно будет изменить в будущих выпусках.
Кроме этогоЯ посмотрел на Sleuth's Span.idToHex()
и увидел, что внутренне использует Long.toHexString()
.Он больше ничего не делает.
Long.toHexString () является кандидатом, но мы видели проблемы, когда мы должны были дополнить нашу строку.
The Brave'sspanId
- это 8-байтовое число .Шестнадцатеричное представление - это строка из 16 символов.Эта строка не должна быть дополнена слева.Это вопрос форматирования значения при его представлении.
Например, это:
System.out.println(String.format("%s", Long.toHexString(Long.MIN_VALUE)));
System.out.println(String.format("%s", Long.toHexString(-1L)));
System.out.println(String.format("%s", Long.toHexString(0L)));
System.out.println(String.format("%s", Long.toHexString(1L)));
System.out.println(String.format("%s", Long.toHexString(Long.MAX_VALUE)));
System.out.println(String.format("%X", Long.MIN_VALUE));
System.out.println(String.format("%X", -1L));
System.out.println(String.format("%X", 0L));
System.out.println(String.format("%X", 1L));
System.out.println(String.format("%X", Long.MAX_VALUE));
Выводит это:
8000000000000000
ffffffffffffffff
0
1
7fffffffffffffff
8000000000000000
FFFFFFFFFFFFFFFF
0
1
7FFFFFFFFFFFFFFF
Это допустимые шестнадцатеричные значения изаполнение отсутствует.
Если вы хотите, чтобы оно было представлено с нулевым заполнением, вы можете сделать это самостоятельно, как уже делали.Я, вероятно, сделал бы это так:
System.out.println(String.format("%016X", Long.MIN_VALUE));
System.out.println(String.format("%016X", -1L));
System.out.println(String.format("%016X", 0L));
System.out.println(String.format("%016X", 1L));
System.out.println(String.format("%016X", Long.MAX_VALUE));
Это вывело бы:
8000000000000000
FFFFFFFFFFFFFFFF
0000000000000000
0000000000000001
7FFFFFFFFFFFFFFF
Надеюсь, это поможет!