【问题标题】:Prevent sign-extension during byte array to string conversion在字节数组到字符串转换期间防止符号扩展
【发布时间】:2018-01-01 12:30:45
【问题描述】:

示例代码中的 BYTEMASK 标志使值在转换为 int 时不会被签名扩展。这个标志如何防止转换表单被符号扩展?

private final static int BYTEMASK = 0xFF;

private static String byteArrayToDecimalString(byte[] bArray) {
        StringBuilder rtn = new StringBuilder();
        for(byte b : bArray) 
            rtn.append(b & BYTEMASK).append(" ");
        return rtn.toString();
    }

【问题讨论】:

  • 符号扩展的。但随后掩码删除了符号扩展。
  • 如何删除符号扩展?
  • 它确实是因为符号位 (1) 与 0 进行二进制与运算时变为 0。因为 1 & 0 为 0。

标签: java string byte data-conversion


【解决方案1】:

正如其他人在 cmets 中已经提到的那样,字节掩码不会阻止符号扩展,而是会撤消它。例如:

0x80 -- sign extend -> 0xffffff80 -- mask with 0xff -> 0x00000080

【讨论】:

  • 感谢您的反馈。我正在调试器中单步执行代码以了解该过程。
猜你喜欢
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-21
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多