【问题标题】:Byte/Int Conversion字节/整数转换
【发布时间】:2015-05-12 18:37:50
【问题描述】:

所以我试图接受一个 int ex。 3240 并转换为打印 -88 的字节。

        final int x = (int) (buffer[bufferIndex++] * 32767.0);
        System.out.println("1 " + x);
        byteBuffer[i] = (byte) x;
        System.out.println("2 " + (byte) x);
        System.out.println("3 " + (int) byteBuffer[i]);

我在从字节转换回 int 时遇到问题。我如何取 -88 并再次使其变为 3240?

【问题讨论】:

  • 你不能。从intbyte 的转换是有损的。
  • int 是 32 位,byte 是 8。所以要从一个字节中恢复您的 int,您所要做的就是获取该字节的 8 位,并找到将其转换为字节时丢失的 24 位。那么 24 位在哪里呢?我不知道,也许他们从你的电脑上掉到了地板上?

标签: java int type-conversion byte


【解决方案1】:

来自Java Language Specification 关于缩小原始转换

缩小原语转换可能会丢失有关 数值的整体大小,也可能会丢失精度和 范围。

当您将int3240 转换为字节值-88 时,您丢失了截断字节中的信息。 int10920 也将转换为 -88。大量其他 int 值也是如此。

无法从3240 恢复-88

【讨论】:

    【解决方案2】:

    除了 Sotorios 的回答之外,您可以通过以下方式进行转换:

    字节转整数

    Byte b = new Byte(NUMBER);
    int i = b.intValue();
    

    int 到字节

    int i = NUMBER;
    byte b = (byte) i;
    

    【讨论】:

      猜你喜欢
      • 2013-09-27
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      相关资源
      最近更新 更多