V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
javen73
V2EX  ›  Java

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

  •  
  •   javen73 · 2019-01-15 16:26:48 +08:00 · 2463 次点击
    这是一个创建于 2140 天前的主题,其中的信息可能已经有所发展或是发生改变。

    工具用的 apache 的 commons-codec

    Fzw1G6.png

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

    intmax2147483647
        1
    intmax2147483647  
       2019-01-15 16:29:05 +08:00
    不明觉厉
    zgcwkj
        2
    zgcwkj  
       2019-01-15 16:31:59 +08:00
    Integer.parseInt(要转换, 16)
    javen73
        3
    javen73  
    OP
       2019-01-15 16:36:11 +08:00
    feiyuanqiu
        4
    feiyuanqiu  
       2019-01-15 16:38:08 +08:00 via Android
    怪语言、怪类库、怪 ide 之前能不能先想想是不是自己的问题呢?
    这个方法下面就是 ecodeHexString 方法
    raphael008
        5
    raphael008  
       2019-01-15 16:40:53 +08:00
    DatatypeConverter.printHexBinary(var).var
    hcymk2
        6
    hcymk2  
       2019-01-15 16:43:07 +08:00
    String.format("%02X ", b)
    gaius
        7
    gaius  
       2019-01-15 16:44:59 +08:00
    要字符串就找 string 结尾的方法
    javen73
        8
    javen73  
    OP
       2019-01-15 16:45:04 +08:00
    @feiyuanqiu #4 不是,你这么还这么大火气呢?
    我又没逼你回答,我拿到字符串咋处理。再说 char 数字 toString 的结果跟那个方法一样,我还不知道试试其他方法么?
    tr0uble
        9
    tr0uble  
       2019-01-15 16:45:08 +08:00
    Integer.toHexString(35)
    fireye
        10
    fireye  
       2019-01-15 16:51:26 +08:00
    这个并未问题啊 10 进制 35 -> 16 进制 23
    楼主想说明什么呢
    javen73
        11
    javen73  
    OP
       2019-01-15 16:52:45 +08:00
    @fireye #10 emmm,为啥被拆开了。。。
    chenstack
        12
    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
        13
    marcong95  
       2019-01-15 16:54:50 +08:00
    LZ 你要不先温习一波 Java 基础如何。。。
    javen73
        14
    javen73  
    OP
       2019-01-15 16:55:16 +08:00
    @chenstack #12 我想说的是 为啥不是[23,23]
    javen73
        15
    javen73  
    OP
       2019-01-15 16:55:48 +08:00
    @marcong95 #13 哈哈哈,是要回去温习了
    k9982874
        16
    k9982874  
       2019-01-15 17:00:39 +08:00
    @javen73 #14 你咋不问为啥不是[0x23, 0x23]呢
    chenstack
        17
    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
        18
    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
        19
    javen73  
    OP
       2019-01-15 17:40:01 +08:00
    @marcong95 #18 谢谢,一开始想歪了,回头想想一个 char 怎么能放两个 16 进制。。。我其实当初不是纠结是不是字符串的问题,我是想着变成 0x23 这种能进行计算的 16 进制。哈哈哈 ,有思路了。蟹蟹٩('ω')و
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1731 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 00:01 · PVG 08:01 · LAX 16:01 · JFK 19:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.