【问题标题】:Java how to parse uint8 in java?Java如何在java中解析uint8?
【发布时间】:2023-04-01 17:40:01
【问题描述】:

我有一个来自 UDP 数据包的 uint8 (无符号 8 位整数)。 Java 只使用签名的原语。如何用java正确解析这个数据结构?

【问题讨论】:

    标签: java bit-manipulation


    【解决方案1】:

    您可以简单地将其解析为shortint,它们的范围足以容纳无符号字节的所有值。

    【讨论】:

      【解决方案2】:

      只需将其作为字节读取,然后转换为 int。

      byte in = udppacket.getByte(0); // whatever goes here
      int uint8 = in & 0xFF;
      

      需要位掩码,否则,位 8 设置为 1 的值将被转换为负整数。示例:

      This:                                   10000000
      Will result in: 11111111111111111111111110000000
      

      因此,当您随后对其应用位掩码 0xFF 时,前导 1 将被取消。供您参考:0xFF == 0b11111111

      【讨论】:

      • 谢谢,这非常有用。感谢您的回复
      • 谢谢!非常感谢
      【解决方案3】:

      你可以这样做:

      int value = eightBits & 0xff;
      

      & 运算符(与 Java 中的所有整数运算符一样)将 eightBits 向上转换为 int(通过对符号位进行符号扩展)。由于这会将大于 0x7f 的值转换为负的 int 值,因此您需要屏蔽除最低 8 位以外的所有位。

      【讨论】:

        【解决方案4】:

        您可以将 8 位存储在 byte 中如果您确实需要将其转换为无符号值(通常不需要),您可以使用掩码

        byte b = ...
        int u = b & 0xFF; // unsigned 0 .. 255 value
        

        【讨论】:

          【解决方案5】:

          0xFF & number 会将数字视为无符号字节。但是结果类型是int

          【讨论】:

            猜你喜欢
            • 2011-01-30
            • 2022-08-18
            • 1970-01-01
            • 1970-01-01
            • 2016-01-27
            • 2013-10-04
            • 2016-07-16
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多