在進(jìn)行私有協(xié)議開發(fā)時(shí),有時(shí)候需要將一個(gè)整數(shù)轉(zhuǎn)換為16進(jìn)制的字符串打印出來,方便觀察調(diào)試。
這里有幾種方案,
1. 使用java原生
java中,可以使用biginteger來進(jìn)行轉(zhuǎn)換, 代碼如下
? public static void main(String[] args) {
? ? ? ? BigInteger bigInteger = new BigInteger("231231");? // output: 3873f
? ? ? ? System.out.println(bigInteger.toString(16));
? ? }
這種方案輸出就可以輸出16進(jìn)制字符串了 ,唯一不足的是,輸出的字節(jié)不能填充補(bǔ)零,不能按照字節(jié)進(jìn)行隔開;比如輸出: 03,87,3f。 這樣是不是更爽
但是java原生的是有符號(hào)數(shù)處理機(jī)制,如果遇到輸出字節(jié)數(shù)組時(shí),記得最高位是符號(hào)位喔。
2. 使用第三方工具包
使用magic-byte,里面提供了打印的功能,方便調(diào)試。另外magic-byte也支持直接序列化java對(duì)象到字節(jié)數(shù)組。 免去了手動(dòng)解析的繁瑣。
引入:
<dependency>
? <groupId>io.github.misterchangray</groupId>
? <artifactId>magic-byte</artifactId>
? <version>2.2.0</version>
</dependency>
? public static void main(String[] args) {
? ? ? ? ? // 將 123123 按照 16進(jìn)制輸出, 每個(gè)字節(jié)間使用 逗號(hào)隔開
? ? ? ? System.out.println( ConverterUtil.prettyPrintByteArray(123123, 16, ","));
? ? }
```
另外附上框架github地址
[magic-byte框架地址](https://github.com/MisterChangRay/magic-byte)