【问题标题】:How to mask byte value in Java?如何在Java中屏蔽字节值?
【发布时间】:2011-07-14 03:50:41
【问题描述】:

我的问题是这样的。

我在 Java 中有一些字节计算。在某些计算中,我得到了我想要的字节值结果“2a”,但在某些计算中,我得到了字节值中的“ffffff9a”。我只想要结果“ffffff9a”中的“9a”值。我试过了,但没有用。

byte a = (byte) b & 0xff;

其中 b 的值为“ffffff9a”字节值。

但是在显示相同的过程时,就像

System.out.println(Integer.toHexString(b & 0xff));

我哪里出错了?我该怎么做才能获得我想要的价值?

谢谢


实际上我正在尝试将 8 位字符转换为 gsm 7 位。另外,如果有人可以帮助我解决这个问题,那也会很有帮助。字符串存储为字节数组,我必须将此字符串或 8 位字节转换为 7 位。

【问题讨论】:

  • 您的代码对我来说看起来不错,请仔细检查您是否正确测试它?也许展示整个例程? 'b' 也是字节类型吗?
  • 我觉得很好 System.out.println(Integer.toHexString(0xffffff9a & 0xff)); prints 9a ideone.com/ikxuO
  • 是 b 是字节类型,打印很好,我想将值存储在变量中,问题出在哪里

标签: java byte masking bitwise-and


【解决方案1】:

Java 中的byte 类型是已签名。它的范围是 [-128, 127]。

System.out.println(Integer.toHexString(a & 0xff)); // note a, not b

即使a 类型为byte,将显示“正确值”,包含负值 ((byte)0x92)。也就是说,(int)a == 0x92 将为 false,因为转换为 int 保留 值、负数和所有值,而 (a & 0xff) == 0x92 将为 true。这是因为逐位 & 将表达式提升为 int 类型,同时“屏蔽”了“符号位”(不是真正的符号位,而是二进制补码的假象)。

见:Java How To "Covert" Bytes

编码愉快。

【讨论】:

    【解决方案2】:

    您的初始代码是:byte a = (byte) b & 0xff;

    (byte) 类型转换仅适用于 b,它已经是 byte。然后& 运算符将其扩展为int,因此您从int 得到结果“ffffff9a”。

    您需要确保您的类型转换适用于& 的结果,而不仅仅是它的第一个操作数:

    byte a = (byte)(b & 0xff);

    注意多余的一对括号。

    【讨论】:

    • 我也试过了(额外的括号),但结果是一样的。
    【解决方案3】:
    //bit is zero base
    public static boolean isSet(byte value, int bit)
    {
        int b = (int)value & 0xff;
        b >>= bit;
        b &= 0x01;
        if( b != 0 )
        {
            return true;
        }
        return false;
    }
    public static byte setBit(byte value, int bit)
    {
        int b = (int)value;
    
        b |= (1 << bit);
        return (byte)(b & 0xff);
    }
    public static byte clearBit(byte value, int bit)
    {
        int b = (int)value;
    
        b &= ~(1 << bit);
        return (byte)(b & 0xff);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多