2017-12-25 8 views
0

私はそう長さ4バイトの配列をunsigned intに変換するにはどうすればよいですか?

import java.io.FileInputStream 

val fis = new FileInputStream(fileName) 

val byteArray = new Array[Byte](4) 

fis.read(byteArray) 

どのように私はそれからunsigned int型にByteArrayの中でバイトを変換することができますのようなバイナリファイルからのバイト数で読んでいますか?

+0

それはそのバイトが表すものによって異なります – Piro

+0

@Piroどのようにそうですか?ファイルのドキュメントでは、4バイトは符号なしのintを表しています。 – mdornfe1

+0

参照するドキュメントはありません。整数は多くの方法で4バイトで表現できます。 @twentysevenはすでに4バイトの文字を表しています。それはゲームにエンコーディングをもたらします。整数は単純に32ビットバイナリの数として保存することができます。 – Piro

答えて

1
def bytesToInt(bytes: Array[Byte], littleEndian: Boolean): Int = { 
    val buffer = java.nio.ByteBuffer.wrap(bytes) 
    if (littleEndian) buffer.order(java.nio.ByteOrder.LITTLE_ENDIAN).getInt 
    else buffer.getInt 
} 

バイトがリトルエンディアンであるかビッグエンディアンであるかは、それらがどのように書き込まれたかという問題です。バイトがより秩序ある順序になっていない(おそらく、プロトコルが16ビットの日付に戻ってしまう可能性がある)場合、より多くのことが必要となる。

関連する問題