Java 里转 16 进制转成了这样,我也是佛了

2019-01-15 16:26:48 +08:00
 javen73

工具用的 apache 的 commons-codec

大老鼠们,你们有什么办法,能优雅的处理 16 进制。谢谢啦

2312 次点击
所在节点    Java
19 条回复
intmax2147483647
2019-01-15 16:29:05 +08:00
不明觉厉
zgcwkj
2019-01-15 16:31:59 +08:00
Integer.parseInt(要转换, 16)
javen73
2019-01-15 16:36:11 +08:00
feiyuanqiu
2019-01-15 16:38:08 +08:00
怪语言、怪类库、怪 ide 之前能不能先想想是不是自己的问题呢?
这个方法下面就是 ecodeHexString 方法
raphael008
2019-01-15 16:40:53 +08:00
DatatypeConverter.printHexBinary(var).var
hcymk2
2019-01-15 16:43:07 +08:00
String.format("%02X ", b)
gaius
2019-01-15 16:44:59 +08:00
要字符串就找 string 结尾的方法
javen73
2019-01-15 16:45:04 +08:00
@feiyuanqiu #4 不是,你这么还这么大火气呢?
我又没逼你回答,我拿到字符串咋处理。再说 char 数字 toString 的结果跟那个方法一样,我还不知道试试其他方法么?
tr0uble
2019-01-15 16:45:08 +08:00
Integer.toHexString(35)
fireye
2019-01-15 16:51:26 +08:00
这个并未问题啊 10 进制 35 -> 16 进制 23
楼主想说明什么呢
javen73
2019-01-15 16:52:45 +08:00
@fireye #10 emmm,为啥被拆开了。。。
chenstack
2019-01-15 16:54:07 +08:00
char[] hex = {'2', '3', '2', '3'};
System.out.println(hex); // 2323
结果是没问题的,你拿 Arrays.toString(hex)结果自然是[2, 3, 2, 3]
marcong95
2019-01-15 16:54:50 +08:00
LZ 你要不先温习一波 Java 基础如何。。。
javen73
2019-01-15 16:55:16 +08:00
@chenstack #12 我想说的是 为啥不是[23,23]
javen73
2019-01-15 16:55:48 +08:00
@marcong95 #13 哈哈哈,是要回去温习了
k9982874
2019-01-15 17:00:39 +08:00
@javen73 #14 你咋不问为啥不是[0x23, 0x23]呢
chenstack
2019-01-15 17:08:33 +08:00
@javen73 #14 因为转换结果是字符数组,不是说 35 变成 23 这个数值。你总不能要求{42, 42} 转成 {2a, 2a},用 char[]表示只能是{'2', 'a', '2', 'a'}。{42, 42} 和 {0x2a, 0x2a}是等价的,不存在转换这个说法
marcong95
2019-01-15 17:30:59 +08:00
@javen73 你也说了库是 commons-codec,从名字可以得知这是个编码的东西,其目的并不是为了完成某些计算机原理课上 35 -> 0x23 这种事情的。

而 Hex.encodeHex 是把某一段二进制数据编码成 16 进制字符串,输入以 byte[]存储的一段数据,输出一个 16 进制字符串,只是这个字符串用了 char[]形式存储。

你的 a 其实表示的是一块长度为 2 字节的数据块,并不是两个 10 进制数字。

你的输出方式输出了这个字符数组,而不是字符串。如果你通过某种方式(例如`String.valueOf(hex)`)把这个字符数组转回字符串的话,那就是"2323"了。或者使用楼上说得 encodeHexString 直接返回 String 类型的字符串

此外,为了完成某些计算机原理课上的“ 10 进制转 16 进制”这种事情的,可以使用 Integer.toString(整数, 16)这种形式
javen73
2019-01-15 17:40:01 +08:00
@marcong95 #18 谢谢,一开始想歪了,回头想想一个 char 怎么能放两个 16 进制。。。我其实当初不是纠结是不是字符串的问题,我是想着变成 0x23 这种能进行计算的 16 进制。哈哈哈 ,有思路了。蟹蟹٩('ω')و

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/527280

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX