gpt4 book ai didi

c# - 在 Windows CE 的 Struct 中编码字符数组

转载 作者:太空宇宙 更新时间:2023-11-03 11:38:48 27 4
gpt4 key购买 nike

如何在以下结构定义中编码字符数组?在 .Net CompactFramework 中(适用于 Windows CE)

//交易请求结构

typedef struct _VXN_REQUEST
{

char DID [33];
char MID [33];
char TID [33];
char ClientRef [33];
char Payload [8192];
ULONG PayloadLength;
} VXN_REQUEST, *LPVXN_REQUEST;

我试过像这样编码它,但它似乎不起作用

        [StructLayout(LayoutKind.Sequential,CharSet=CharSet.Auto)]
public struct VXN_REQUEST
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 33)]
public string DID;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 33)]
public string MID;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 33)]
public string TID;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 33)]
public string ClientRef;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 33)]
public string Payload;
public uint PayloadLength;

}

也试过这样,但没有一个有效, native 代码将其作为单个字符。

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct VXN_REQUEST
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 33)]

public char[] DID;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 33)]

public char[] MID;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 33)]

public char[] TID;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 33)]

public char[] ClientRef;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 33)]

public char[] Payload;
public uint PayloadLength;
}

最佳答案

.NET char 占用两个字节,它存储以 utf-16 编码的 Unicode 代码点。在声明中使用 byte 而不是 char。如果您确实需要这些字段为字符串,请使用 Encoding.ASCII.GetBytes() 来填充 byte[]。

关于c# - 在 Windows CE 的 Struct 中编码字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5371421/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com