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
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
まず、バッファ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
これで値が含まれるはずです。