我正在从二进制文件中读取数据,目的是将其转换为 xml。为此,我有一个定义了所有封送处理的类来阅读它。
文本值是 32 字节的固定长度字符串 - 在 ANSI 韩国代码页中。
我使用 XmlSerializer Serialize() 将其保存为 xml。
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
public byte[] pName;
但是 XmlSerializer 仅支持带有 byte[] 的 base64/hex。
我不能使用
UnmanagedType.ByValTStr
因为它不允许指定代码页,而且我得到了不正确、损坏的字符串,例如:
µðÆúÆ®º§¶óÅä³²ÀÚÀå°©1
如何让数据作为 EUC-KR 字符串读取或为这些特定的 32 字节数组提供自定义序列化以自己将其转换为可读格式?
我总共处理了大约 20 个文件,每个文件都有不同的结构 - 但使用相同的 32 字节字符串作为文本。
因此,手动转换和循环遍历具有各种类结构的嵌套数据不是一个可行的选择。
更新:示例结构:
[StructLayout(LayoutKind.Sequential)]
public struct ClientData
{
[MarshalAs(UnmanagedType.U4)]
public uint index;
[MarshalAs(UnmanagedType.U4)]
public uint serial;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string pName;
public string StrName { get { return System.Text.Encoding.GetEncoding("EUC-KR").GetString(pName, 0, 32); } }
}
蛊毒传说
相关分类