2

c.dotネットWebサービスから取得するiam

byte[] data = new byte[] {-33, -96,0, 0, 0,0,0,0};

これを長い値に変換したいこれを試しました

long result = (long)ByteBuffer.wrap(index).getInt();

-543162368実際の値が41183

4

1 に答える 1

1

まず、バッファgetLong()ではなく呼び出します。getInt()

ただし、受信するデータはリトルエンディアンです。つまり、最初に下位バイトから始まります。ByteBuffersデフォルトとしてビッグエンディアンの順序で作成されます。LITTLE_ENDIAN正しい値を取得するには、順序を設定する必要があります。

ByteBuffer buffer = ByteBuffer.wrap(index)
buffer.order(ByteOrder.LITTLE_ENDIAN);
long result = buffer.getLong();

どうやらバイトオーダーを設定したり、getLongを使用したりすることはできないため、次のようにする必要があります。

// Reverse array
for (int i = 0; i < 4; ++i)
{
   byte temp = data[i];
   data[i] = data[8-i];
   data[8-i] = temp;
}

// Get two ints and shift the first int into the high order bytes 
// of the result.
ByteBuffer buffer = ByteBuffer.wrap(data);
long result = ((long)buffer.getInt()) << 32;
result |= (long)buffer.getInt();

resultこれで値が含まれるはずです。

于 2012-08-22T13:16:40.710 に答える