【问题标题】:How do you append two bytes to an int如何将两个字节附加到 int
【发布时间】:2011-12-26 19:43:40
【问题描述】:

我正在尝试附加两个具有十六进制值的字节并将它们存储到一个整数中。所以显然一切都是无符号的值。 我将提供一个示例,因为这更容易看到。

两个字节 0x20 0x07

整数 编辑:哎呀,我在这里犯了一个巨大的错误。对不起所有的混乱。 我希望整数存储 2007 而不是 0x2007。我真的很抱歉。

有没有办法做到这一点,而无需将字节转换为字符串并附加并切换为 int? 还是转换为字符串是唯一的方法?

【问题讨论】:

  • 我不确定我是否理解这个问题。你能告诉我们当你有two bytes 0x2F 0x3F这样的东西时整数的值是多少吗?
  • 我真的很抱歉造成混乱。我已经编辑了我的问题。谢谢

标签: java integer append byte


【解决方案1】:

你可以试试

byte b1 = (byte) 0x90;
byte b2 = (byte) 0xF7;

int i = ((b1 & 0xFF) << 8) | (b2 & 0xFF);

但是,如果您使用DataInputStreamByteBuffers,您通常不需要这样做。在这两种情况下都使用getShort

【讨论】:

    【解决方案2】:

    是的,只需将 b1 移动 8 位并将其添加到 b2:

    byte b1 = 0x20;
    byte b2 = 0x07;
    
    int i1 = (b1 << 8) + b2; // gives 0x2007
    
    // alternatively
    int sameInt = b1 * 256 + b2; // gives 0x2007
    

    【讨论】:

    • 更优雅的应该是:(b1
    • 这假设两个值都在 0 到 127 之间。
    • @PeterLawrey:它假设两个字节值都在 0 到 255 之间(即 0x00 和 0xFF),因为它们都是字节,所以情况总是如此。例如,0xFF*256 + 0xFF = 0xFFFF。
    • @aleph_null bytes 在 Java 中的签名介于 -128 和 127 之间。在 Java 中不能有无符号字节。
    • @PeterLawrey:哎呀... java 符号在将字节提升为 int 时会扩展它。谢谢指正。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 2013-04-05
    相关资源
    最近更新 更多