byte配列→float型の値を読みlongに変換
UTF-8 encodingで書かれたテキスト分とfloat型 (IEEE-754/octet-stream)で書かれたバイナリ分混ざったファイルがあります。そのファイルをdataInputStreamを使って読んで、byte配列に保存されています。
FileInputStream fis = new FileInputStream(ファイル);
DataInputStream dis = new DataInputStream(fis);
byte[] bs = new byte[適切なサイズ];
//読み込み
dis.read(bs);
byte配列「bs」のindex 0 から 5までテキスト情報(XML式のヘッダー情報)あると仮定します。
UTF-8の分は for loop で "new String(bs, loop index, 1, "ASCII")"すると読み取れます。
問題は以下:
index 6 から 17まではfloat型のバイナリデータ保存されているとします。
たとえば、index 6 から 順番に以下のHex string があります。
01 2A 5F 4E B4 F2 45 4E 92 6A 5F 4E (4つのグループにしたのは分かりやすくするため)
上記float型のHex String をlong intに変換して、別途用意された配列に保存したい。
ネット検索でByteBufferにwrapメソッドを使って、getFloat(index) 又は getFloat()でfloat型取得できると書いていますがその先はどうやってlong int変換できるのでしょうか?
上記のHex string の変換後の値(取扱いしたい値)は19554126, 3035776334, 2456444750です。
今までのコード:
long [] data = new long [既知のサイズ];
ByteBuffer b = ByteBuffer.wrap(bs).order(ByteOrder.LITTLE_ENDIAN);
//なんらかのloop 又は ByteBuffer b の最後まで読める仕組み(remainingというメソッド?){
Float f = b.getFloat(); 又は Float f = b.getFloat(loop index);
data[index] = fの longに変換した値 // つまり 19554126, 3035776334 ....
}
ネットで探していますが、やり方まだわからない。
どなたか、教えてください。
よろしくお願いします。
お礼
回答頂きありがとうございました。