Android中的短到字节和字节到短的转换

Posted

技术标签:

【中文标题】Android中的短到字节和字节到短的转换【英文标题】:short to byte and byte to short conversion in Android 【发布时间】:2011-12-16 11:34:49 【问题描述】:

我正在开发一款 android 软件。在软件的特定部分,我需要将短转换为字节并重新转换为短。我尝试了下面的代码,但转换后的值不一样。

  short n, n1;
  byte b1, b2;
  n = 1200;
  // short to bytes conversion
  b1 = (byte)(n & 0x00ff);
  b2 = (byte)((n >> 8) & 0x00ff);

  // bytes to short conversion
  short n1 = (short)((short)(b1) | (short)(b2 << 8));

执行代码后n和n1的值不一样。为什么?

【问题讨论】:

重复***.com/questions/2188660/… 【参考方案1】:

我没有让 Grahams 解决方案起作用。但是,这确实有效:

n1 = (short)((b1 & 0xFF) | b2<<8);

【讨论】:

【参考方案2】:

您可以使用 ByteBuffer:

final ByteBuffer buf = ByteBuffer.allocate(2);
buf.put(shortValue);
buf.position(0);

// Read back bytes
final byte b1 = buf.get();
final byte b2 = buf.get();

// Put them back...
buf.position(0);
buf.put(b1);
buf.put(b2);

// ... Read back a short
buf.position(0);
final short newShort = buf.getShort();

编辑:固定 API 使用。呸。

【讨论】:

这绝对是矫枉过正,OP的问题可以通过简单地使用按位运算符来解决,如@Jave的答案所示 除了这个解决方案不关心字节序! 这本身并不是一个糟糕的解决方案。如果要保存大量值或将一组短裤转换为字节然后再返回,这绝对值得考虑。最简单的情况 - 根据要求在一个短字节/两个字节之间进行转换,最好在不分配缓冲区的情况下完成。

以上是关于Android中的短到字节和字节到短的转换的主要内容,如果未能解决你的问题,请参考以下文章

Java 整数到短的转换规则

在 c# 中,隐式短到字节是不可能的,但在隐式 int 到短时没有问题。源值始终与目标范围一致

参数内部和块内部的短/字节有啥区别[重复]

将范围-1到1的浮点数转换为短的快速方法?

C ++获取字节数组中字符串后的短数

Java 移位字节返回意外结果