C# 구조체 배열을 파일로 저장하고 파일에서 분석하는 방법
2737 단어 c#
public struct USER_RECORD
{
public uint nGroupID;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
public byte[] szUserID;
public uint nFinger;
public uint nInstances;
public VCOMWrapper.MX00_TEMPLATE_INSTANCE[] instanceRecords;
}
[StructLayout(LayoutKind.Sequential)]
public struct MX00_TEMPLATE_INSTANCE
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2048)]
public byte[] p378Template;
}
List ps = new List();
지금 ps를 파일로 저장하고 다음 파일에서 ps를 정확하게 해석할 수 있습니까?
구조체 USERRECORD는 instance Records가 없으면 이 구조체를 Byte[]로 변환해서 파일에 쓰고 해석할 때 파일byte[]를 읽고 구조체로 변환할 수 있지만 지금은 VCOMWrapper가 있습니다.MX00_TEMPLATE_INSTANCE[], 구조체를 Byte[]로 전환하는 데 실패했습니다.
해결책----------------------------
서열화는 비교적 간단하게 쓴다
http://www.cnblogs.com/yzenet/p/3622833.html
해결책----------------------------
public static void Serialize(USER_RECORD rec, string path)
{
using (BinaryWriter wr = new BinaryWriter(File.OpenWrite(path)))
{
Serialize(rec, wr);
}
}
public static USER_RECORD Deserialize(string path)
{
using (BinaryReader rd = new BinaryReader(File.OpenRead(path)))
{
return Deserialize(rd);
}
}
private static void Serialize(USER_RECORD rec, BinaryWriter output)
{
output.Write(rec.nGroupID);
WriteByteArray(rec.szUserID, output);
output.Write(rec.nFinger);
output.Write(rec.nInstances);
if (rec.nInstances > 0)
{
MX00_TEMPLATE_INSTANCE[] array = rec.instanceRecords;
Debug.Assert(array != null && array.Length == rec.nInstances);
for (int i = 0; i = 0)
{
if (len > 0)
return input.ReadBytes(len);
else
return new byte[0];
}
else
return null;
}
private static USER_RECORD Deserialize(BinaryReader input)
{
USER_RECORD rec = new USER_RECORD();
int len;
rec.nGroupID = input.ReadUInt32();
rec.szUserID = ReadByteArray(input);
rec.nFinger = input.ReadUInt32();
len = (int)(rec.nInstances = input.ReadUInt32());
MX00_TEMPLATE_INSTANCE[] array = new MX00_TEMPLATE_INSTANCE[len];
for (int i = 0; i return rec;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.