0

给定字符串中的整数值,我想将其转换为 2 字节有符号整数。

BigInteger完成这项工作,但我不知道如何授予 2 个字节......

public void handleThisStringValue(String x, String y){
  BigInteger bi_x = new BigInteger(x, 10);          
  BigInteger bi_y = new BigInteger(y, 10);
  byte[] byteX = bi_x.toByteArray();
  byte[] byteY = bi_y.toByteArray();
}

我注意到BigInteger.toByteArray()处理适合我的负值。

然后我需要读取这些值(负值和正值),或者说转换byte[2]signed int. 有什么建议吗?

4

4 回答 4

2

好吧,您的问题仍然缺乏某些信息。

首先,Java 整数是 32 位长的,所以它们不适合 2 字节数组,你需要一个 4 字节数组,否则你实际上是在处理 16 位长的短数据类型。

此外,不确定您是否需要处理任何类型的字节排序(小端、大端)。

无论如何,假设您使用仅适合 16 位和大端字节顺序的整数,您可以执行以下操作来创建字节数组:

public static byte[] toByteArray(String number){
    ByteBuffer buffer = ByteBuffer.allocate(4);
    buffer.putInt(Integer.parseInt(number));
    return Arrays.copyOfRange(buffer.array(), 2, 4); //asumming big endian
}

并如下将其转换回来:

public static int toInteger(byte[] payload){
    byte[] data = new byte[4];
    System.arraycopy(payload, 0, data, 2, 2);
    return ByteBuffer.wrap(data).getInt(); 
}

您还可以使用该ByteBuffer.order方法更改 ByteBuffer 的字节顺序。

我使用它如下:

byte[] payload = toByteArray("255");
int number = toInteger(payload);
System.out.println(number);

输出是255

于 2012-04-27T14:52:42.860 回答
1
int x = bs[0] | ((int)bs[1] << 8);
if (x >= 0x8000) x -= 0x10000;
// Reverse
bs[0] = (byte)(x & 0xFF);
bs[1] = (byte)((x >> 8) & 0xFF);
于 2012-04-27T14:27:25.873 回答
0

你可以反过来:

new BigInteger(byteX);
new BigInteger(byteY);

这正是你想要的,然后你可以用.intvalue()它作为一个int

于 2012-04-27T14:39:41.297 回答
0

解决方案很简单,基于我在这里找到的帖子(谢谢大家):

请记住,我想要一个 2 字节的整数......所以它是一个 Short!

String val= "-32";
short x = Short.parseShort(val);
byte[] byteX = ByteBuffer.allocate(2).putShort(x).array();

......它的工作原理!

然后,我正在使用 BigInteger 来读取它!

int x1 = new BigInteger(byteX).intValue();

或者

short x2 = new BigInteger(x).shortValue();
于 2012-04-28T10:21:37.663 回答