ソースコード:
class SampleClass
{
public int IntValue { get; set; } = 0;
public void Save(string path)
{
// Intをbyte[]へ変換
byte[] buff = BitConverter.GetBytes(IntValue);
// 保存
using FileStream fs = new(
path, FileMode.Create, FileAccess.Write);
fs.Write(buff);
}
public void Load(string path)
{
byte[] buff = new byte[4];
// 読み込み
using FileStream fs = new(
path, FileMode.Open, FileAccess.Read);
fs.Read(buff, 0, buff.Length);
// byte[]からIntへ変換
IntValue = BitConverter.ToInt32(buff, 0);
}
}
class Program
{
static public void Main()
{
const string binFile = @"sample.bin";
SampleClass obj = new();
obj.IntValue = 65536;
obj.Save(binFile);
obj.IntValue = 255;
obj.Load(binFile);
Console.WriteLine($"{obj.IntValue}");
}
}
結果
65536
プログラムの途中でIntValueの値を255にしていますが、Load()でIntValue内容がファイルから復元されて、結果が65536になっています。
以下はVSCodeの拡張機能のHexEditorで表示したsample.binの内容のスクリーンショットです。
65536が00 00 01と並んでおり(リトルエディアン)これを逆順にすると16進数で10000になっていることが確認出来ます。
試しに1減らして65535でFF FF 00の並びになることを確認してみます。
予想通りの結果になりました。
コメント