javen73
V2EX  ›  Java

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

  •  
  •   javen73 · Jan 15, 2019 · 3585 views
    This topic created in 2848 days ago, the information mentioned may be changed or developed.

    工具用的 apache 的 commons-codec

    Fzw1G6.png

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

    intmax2147483647
    intmax2147483647
    Jan 15, 2019
    1
    不明觉厉
    zgcwkj
    zgcwkj
    Jan 15, 2019
    2
    Integer.parseInt(要转换, 16)
    javen73
    javen73
    OP
    Jan 15, 2019
    3
    feiyuanqiu
    feiyuanqiu
    Jan 15, 2019 via Android
    4
    怪语言、怪类库、怪 ide 之前能不能先想想是不是自己的问题呢?
    这个方法下面就是 ecodeHexString 方法
    raphael008
    raphael008
    Jan 15, 2019
    5
    DatatypeConverter.printHexBinary(var).var
    hcymk2
    hcymk2
    Jan 15, 2019
    6
    String.format("%02X ", b)
    gaius
    gaius
    Jan 15, 2019
    7
    要字符串就找 string 结尾的方法
    javen73
    javen73
    OP
    Jan 15, 2019
    8
    @feiyuanqiu #4 不是,你这么还这么大火气呢?
    我又没逼你回答,我拿到字符串咋处理。再说 char 数字 toString 的结果跟那个方法一样,我还不知道试试其他方法么?
    tr0uble
    tr0uble
    Jan 15, 2019
    9
    Integer.toHexString(35)
    fireye
    fireye
    Jan 15, 2019
    10
    这个并未问题啊 10 进制 35 -> 16 进制 23
    楼主想说明什么呢
    javen73
    javen73
    OP
    Jan 15, 2019
    11
    @fireye #10 emmm,为啥被拆开了。。。
    chenstack
    chenstack
    Jan 15, 2019
    12
    char[] hex = {'2', '3', '2', '3'};
    System.out.println(hex); // 2323
    结果是没问题的,你拿 Arrays.toString(hex)结果自然是[2, 3, 2, 3]
    marcong95
    marcong95
    Jan 15, 2019
    13
    LZ 你要不先温习一波 Java 基础如何。。。
    javen73
    javen73
    OP
    Jan 15, 2019
    14
    @chenstack #12 我想说的是 为啥不是[23,23]
    javen73
    javen73
    OP
    Jan 15, 2019
    15
    @marcong95 #13 哈哈哈,是要回去温习了
    k9982874
    k9982874
    Jan 15, 2019
    16
    @javen73 #14 你咋不问为啥不是[0x23, 0x23]呢
    chenstack
    chenstack
    Jan 15, 2019
    17
    @javen73 #14 因为转换结果是字符数组,不是说 35 变成 23 这个数值。你总不能要求{42, 42} 转成 {2a, 2a},用 char[]表示只能是{'2', 'a', '2', 'a'}。{42, 42} 和 {0x2a, 0x2a}是等价的,不存在转换这个说法
    marcong95
    marcong95
    Jan 15, 2019
    18
    @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
    javen73
    OP
    Jan 15, 2019
    19
    @marcong95 #18 谢谢,一开始想歪了,回头想想一个 char 怎么能放两个 16 进制。。。我其实当初不是纠结是不是字符串的问题,我是想着变成 0x23 这种能进行计算的 16 进制。哈哈哈 ,有思路了。蟹蟹٩('ω')و
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5100 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 08:22 · PVG 16:22 · LAX 00:22 · JFK 03:22
    ♥ Do have faith in what you're doing.