2012-04-27 3 views
0

文字列から整数値が与えられた場合、2バイトの符号付き整数に変換したいと思います。私はBigInteger.toByteArray()が私に適している負の値を扱うことに気づい文字列 - Davik VM上で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

は仕事をしていませんが、私は2つのバイトを付与する方法がわかりません。

次に、これらの値(負と正の値)を読み取るか、またはbyte[2]signed intに変換する必要があります。なにか提案を?

+1

? – Attila

+0

私はsigned intをbyte []に​​変換し、signed intに戻す必要があります。 Integer.parseInt()は、Stringをintに変換します。 – Jorge

+0

私はあなたのコードに基づいて、文字列をint型にint型に変換していると仮定していました。これはint型のbyte [2]と思われるバイト[ – Attila

答えて

0

ソリューションは単純です:

は私が望んでいたことを覚えておいてください2バイトの整数...それは短いです!

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

...と動作します。

次に、私はBigIntegerを使ってそれを読み返しています!

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

または `Integer.parseInt()`と間違って何

short x2 = new BigInteger(x).shortValue(); 
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); 
+0

です。そしてその逆数?バイト[2]にint? – Jorge

0

あなたは逆を行うことができます。

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

それは正確に何をしたいのです、そしてあなたがint

2

としてそれを得るために.intvalue()を使用することができますさて、ご質問はまだ特定の情報が欠けています。

最初に、Javaの整数は32ビット長であるため、2バイト配列に収まらないため、4バイト配列が必要です。そうでない場合は、実際には短いデータ型である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 
} 

とするために、以下のように:あなたが唯一の16ビットとビッグエンディアンバイト順に合う整数を使用している次のように、あなたはバイト配列を作成するために何かができると仮定して任意の割合で

、それをバックに変換:

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

+0

私のArrayクラスのcopyOfRange(byte [] original、int、intから)メソッドはありません。私はAndroid用に開発中です:( – Jorge

+0

@Jorge代わりに、他のメソッドで行ったように、System.arrayCopyを使用してください。 –

+0

代わりにShort.parseShort()とByteBuffer.putShort()を使用しないのはなぜですか? – JesusFreke

関連する問題