微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从固定字节 [] 数组中读取字节

如何解决从固定字节 [] 数组中读取字节

我需要使用一个包含结构体的 DLL:

unsafe public struct RESPONSE2
    {
        // some other stuff...
        public THERSP TheRsp;
        // some other stuff...
    };

unsafe public struct THERSP
    {
        // some other stuff...
        public TRANSACTIONINFO Transaction;
    };

unsafe public struct TRANSACTIONINFO
    {
        // some other stuff...
        public fixed byte CardName[17];
        // some other stuff...
    }

现在,当我得到信息时,我需要从 TRANSACTIONINFO 读取信息。 DLL 具有获取响应的功能,所以我得到的响应如下

RESPONSE2 rsp = new RESPONSE2();
int x = getRsp(ref rsp);

使用 DLL

[DllImport("thedll.dll",CallingConvention = CallingConvention.StdCall)]
public static extern int getRsp(ref RESPONSE2 Response);

在这工作正常,但我无法从 TRANSACTIONINFO.CardName 中读出字节

我试过狐狸的例子: 我期望的解码值是 VISA。

1.

var name = Marshal.PtrToStringAnsi(new IntPtr(rsp.TheRsp.Transaction.CardName));

这给了我“V”的结果,其他字节都丢失了。

2.

byte[] test_card = new byte[17];
int i = 0;
while (i < 17)
{
   test_card[i] = rsp.TheRsp.Transaction.CardName[i];
   i++;
}

这正确地给了我第一个字节,但所有其他字节都是 0x00。

3.

unsafe
            {
                byte* ptr = rsp.TheRsp.Transaction.CardName;
                {
                    byte[] bytes = new byte[17];
                    int index = 0;
                    byte* counter = ptr;
                    while(*counter != 0x00)
                    {
                        bytes[index] = *counter;
                        index++;
                        counter++;
                    }
                    string name = Encoding.ASCII.GetString(bytes,17);
                }
            }

这也给了我结果“V”。

那么问题是,我如何读取所有 CardName 字节?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。