将 Span Id 从 long 转换为 String
Convert Span Id from long to String
如何将从 span.context().spanId()
检索到的 Brave Span id 转换为包含其 64 个低位十六进制编码位的 String
。 Sleuth 包含一个静态实用程序方法 Span.idToHex()
来执行此操作。他们是勇敢的等价物吗? Long.toHexString()
是一个候选人,但我们发现了我们必须在字符串左侧填充的问题。
我看到自从 Brave 版本 5.6.0 there is the spanIdString()
Returns the hex representation of the span's ID
.
这在内部使用 HexCodec
中的 toLowerHex(long v)
。据我所知,这是自版本 4.9.0
以来的当前形式。在此之前,该方法自版本 4.0.0
以来就存在,但形式有所不同。此方法是 public
,您可以使用它,但要小心,因为包名称暗示它不是 public API,我希望它可以在未来的版本中更改.
除此之外,我还查看了 Sleuth's Span.idToHex()
,发现它在内部使用了 Long.toHexString()
。它什么都不做。
Long.toHexString() is a candidate, but we saw issues where we had to left pad our string.
The Brave 的 spanId
是 8-byte number。十六进制表示可能是 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
希望对您有所帮助!
如何将从 span.context().spanId()
检索到的 Brave Span id 转换为包含其 64 个低位十六进制编码位的 String
。 Sleuth 包含一个静态实用程序方法 Span.idToHex()
来执行此操作。他们是勇敢的等价物吗? Long.toHexString()
是一个候选人,但我们发现了我们必须在字符串左侧填充的问题。
我看到自从 Brave 版本 5.6.0 there is the spanIdString()
Returns the hex representation of the span's ID
.
这在内部使用 HexCodec
中的 toLowerHex(long v)
。据我所知,这是自版本 4.9.0
以来的当前形式。在此之前,该方法自版本 4.0.0
以来就存在,但形式有所不同。此方法是 public
,您可以使用它,但要小心,因为包名称暗示它不是 public API,我希望它可以在未来的版本中更改.
除此之外,我还查看了 Sleuth's Span.idToHex()
,发现它在内部使用了 Long.toHexString()
。它什么都不做。
Long.toHexString() is a candidate, but we saw issues where we had to left pad our string.
The Brave 的 spanId
是 8-byte number。十六进制表示可能是 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
希望对您有所帮助!