下面的代码读取文件偏移量并将十六进制值写入“MyGlobals.Hexbytes”变量....我怎样才能将其写入数组呢?
非常感谢
MyGlobals.Mapsettings_filepath = "C:\\123.cfg";
///////////////////////////// Read in the selected //////////////
BinaryReader br = new BinaryReader(File.OpenRead(MyGlobals.Mapsettings_filepath),
System.Text.Encoding.BigEndianUnicode);
for (int a = 32; a <= 36; a++)
{
br.BaseStream.Position = a;
MyGlobals.Hexbytes += br.ReadByte().ToString("X2") + ",";
}
答案 0 :(得分:1)
让MyGlobals.Hexbytes
成为List<string>
,然后:
br.BaseStream.Position = a;
MyGlobals.Hexbytes.Add(br.ReadByte().ToString("X2"));
稍后要显示它,请使用String.Join
,如下所示:
string myBytes = string.Join(",", MyGlobals.Hexbytes.ToArray());
答案 1 :(得分:1)
Array是固定大小的结构,因此您无法向其中添加元素。
如果您事先知道大小(在您的示例中看起来如此),您可以实例化它,然后将元素添加到预先分配的插槽中:
e.g。
string[] byteStrings = new string[5]; // 36 - 32 + 1 = 5
for (int a = 32; a <= 36; a++)
{
br.BaseStream.Position = a;
byteStrings[a - 32] = br.ReadByte().ToString("X2");
}
但使用动态可调整大小的集合要轻松得多,例如List<T>
:
var byteStrings = new List<string>();
for (int a = 32; a <= 36; a++)
{
br.BaseStream.Position = a;
byteStrings.Add(br.ReadByte().ToString("X2"));
}
答案 2 :(得分:0)
您应首先定义数组的大小,因此您应首先设置其大小,然后填充它:
string[] array = new string[5];
for (int a = 32; a <= 36; a++)
{
br.BaseStream.Position = a;
array[a - 32] += br.ReadByte().ToString("X2");
}
以下是如何一次读取4个字节:
BinaryReader reader = ....;
...
byte[] buffer = new byte[4];
reader.Read(buffer, 0, 4);
...
答案 3 :(得分:0)
假设可能是MyGlobals.Hexbytes
,您可以按原样保留代码并最终添加:
var myarray = MyGlobals.Hexbytes.Split(',');
myarray
是一个字符串数组。