0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DataからInt32配列の取得

Last updated at Posted at 2018-12-14

#事の始まり
Int32データの配列が出力されているバイナリファイルをDataオブジェクトとして読み込んで、Swift上でInt32配列に置き換えて扱うお話。
これが思ったよりも一筋縄ではいかなかった。
#C言語だったら?
C言語だと以下のようなコードになると思います。
(コードを簡略化するために読み込みデータ長は1024でハードコードしています。)

int buf[1024];
FILE *fp = fopen("binary.dat", "r");
fread(buf, sizeof(int), 1024, fp);
fclose(fp)

#Swift4での実装方法
(Swift3でも同じ方法でいけるらしい?です。)

var buf:[Int32]? = nil
if let fileUrl:URL = Bundle.main.url(forResource: "binary", withExtension: "dat")
{
	do
	{
		let dat:Data = try Data(contentsOf: fileUrl)
		buf = dat.withUnsafeBytes{
			Array(UnsafeBufferPointer<Int32>(start:$0, count:1024))
		}
	}
	catch
	{
		buf = nil
	}
}

C言語やObjective-Cで慣れていると、逆にややこしいですね。
Int32だけでなくFloatやInt16、Doubleでも多分同様でできると思います。
ただし、UInt8配列への変換はキャストすれば、オペレーターがやってくれるみたい。

let byteBuff:[UInt8] = [UInt8](dat)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?