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

[apache commons codec]Problem with the BinaryCodec class

  •  
  •   JinTianYi456 · 2021-03-24 11:05:19 +08:00 · 1067 次点击
    这是一个创建于 1375 天前的主题,其中的信息可能已经有所发展或是发生改变。
    import org.apache.commons.codec.binary.BinaryCodec;
    
    System.out.println(BinaryCodec.toAsciiString(new byte[] { 'a' }));
    // output 01100001
    System.out.println(BinaryCodec.toAsciiString(new byte[] { 'b' }));
    // output 01100010
    System.out.println(BinaryCodec.toAsciiString(new byte[] { 'a', 'b' }));
    // output 0110001001100001(ba), why not 0110000101100010(ab)?
      // 为什么设计成倒序呢?
    
    第 1 条附言  ·  2021-03-25 15:55:02 +08:00
    {
        var sle = "abc".getBytes(StandardCharsets.UTF_16LE);
        System.out.println(Bytes.asList(sle).stream()
                .map(b -> StringUtils.leftPad(Integer.toBinaryString(b), 8, '0'))
                .collect(Collectors.joining(",")));
        // out 01100001,00000000,01100010,00000000,01100011,00000000
        System.out.println(BinaryCodec.toAsciiString(sle).replaceAll("(.{8})", "$1,"));
        // out 00000000,01100011,00000000,01100010,00000000,01100001,
    }
    {
        var sbe = "abc".getBytes(StandardCharsets.UTF_16BE);
        System.out.println(Bytes.asList(sbe).stream()
                .map(b -> StringUtils.leftPad(Integer.toBinaryString(b), 8, '0'))
                .collect(Collectors.joining(",")));
        // out 00000000,01100001,00000000,01100010,00000000,01100011
        System.out.println(BinaryCodec.toAsciiString(sbe).replaceAll("(.{8})", "$1,"));
        // out 01100011,00000000,01100010,00000000,01100001,00000000,
    }
    
    JinTianYi456
        1
    JinTianYi456  
    OP
       2021-03-25 11:38:46 +08:00
    self-up-1
    FucUrFrd
        2
    FucUrFrd  
       2021-03-25 12:42:16 +08:00 via Android   ❤️ 1
    @JinTianYi456

    小同志您好,这是正序,这是预期的
    翻开人大附小的 c 语言竞赛课本,01 表达方式左边是最高位

    用高级知识,是 little endian, 如果用你的答案就是 big endian, 任何高级技术要回归本源才能获得真谛
    JinTianYi456
        3
    JinTianYi456  
    OP
       2021-03-25 15:55:17 +08:00
    @FucUrFrd #2 测试之后,并不是你说的这回事,请看第 1 条附言
    JinTianYi456
        4
    JinTianYi456  
    OP
       2021-03-25 16:02:13 +08:00
    或许是这样理解的: BinaryCodec 是把整一串已 big-endian 来排的. Soga :dog (不能以字符编码的单字符 BE 来理解的)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2761 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:01 · PVG 18:01 · LAX 02:01 · JFK 05:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.