【问题标题】:Java unsigned byte[2] to int? [duplicate]Java无符号字节[2]到int? [复制]
【发布时间】:2013-03-11 17:33:48
【问题描述】:

我需要做的就是将一个无符号的两字节数组转换为一个整数。我知道,我知道,Java 没有无符号数据类型,但我的数字是假装无符号字节。

byte[] b = {(byte)0x88, (byte)0xb8}; // aka 35000
int i = (byte)b[0] << 8 | (byte)b[1];

问题是不能正确转换,因为它认为那些是有符号字节...如何将其转换回 int?

【问题讨论】:

  • 转换为 int 然后进行移位。
  • 它并没有真正复制。链接的问题大约是 2 个字节到 int 不是无符号字节。您可以推断您还必须从第一个答案中屏蔽第一个字节,但这一点都不明显。我不明白他们如何将此答案标记为重复。接受前是否经过检查?我们可以举报吗?

标签: java type-conversion byte


【解决方案1】:

你可以使用

int i = ((b[0] & 0xFF) << 8) | (b[1] & 0xFF);

int i = ByteBuffer.wrap(b).getChar();

int i = ByteBuffer.wrap(b).getShort() & 0xFFFF;

【讨论】:

    【解决方案2】:

    Java 中没有无符号数字、字节或整数或其他任何东西。当字节在移位之前转换为int时,它们会进行符号扩展,即0x88 => 0xFFFFFF88。你需要掩盖你不需要的东西。

    试试这个

    int i = ((b[0] << 8) & 0x0000ff00) | (b[1] & 0x000000ff);
    

    你会得到 35000。

    【讨论】:

      猜你喜欢
      • 2013-05-12
      • 1970-01-01
      • 2014-04-04
      • 2016-11-06
      • 2013-02-10
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      相关资源
      最近更新 更多