V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
JinTianYi456
V2EX  ›  Java

[apache commons codec]Problem with the BinaryCodec class

  •  
  •   JinTianYi456 · Mar 24, 2021 · 1460 views
    This topic created in 1874 days ago, the information mentioned may be changed or developed.
    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)?
      // 为什么设计成倒序呢?
    
    Supplement 1  ·  Mar 25, 2021
    {
        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
       Mar 25, 2021
    self-up-1
    FucUrFrd
        2
    FucUrFrd  
       Mar 25, 2021 via Android   ❤️ 1
    @JinTianYi456

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

    用高级知识,是 little endian, 如果用你的答案就是 big endian, 任何高级技术要回归本源才能获得真谛
    JinTianYi456
        3
    JinTianYi456  
    OP
       Mar 25, 2021
    @FucUrFrd #2 测试之后,并不是你说的这回事,请看第 1 条附言
    JinTianYi456
        4
    JinTianYi456  
    OP
       Mar 25, 2021
    或许是这样理解的: BinaryCodec 是把整一串已 big-endian 来排的. Soga :dog (不能以字符编码的单字符 BE 来理解的)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3443 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 118ms · UTC 11:56 · PVG 19:56 · LAX 04:56 · JFK 07:56
    ♥ Do have faith in what you're doing.