0

C# でちょっとした "memcpy" ハックをしようとしています。System.Type を byte* に変換しないため、この部分に行き詰まります。

    public unsafe void memcpy(byte* dest, object src, int length)
    {
        byte* nsrc;
        byte* ndst;
        nsrc = (byte*)((src.GetType())src);

    }

ご覧のとおり、オブジェクトの型を取得してから、元のオブジェクトにキャストしようとしています。

何か案は?

アップデート:

多分シリアライゼーションを使用していますか?

    private byte[] ObjectToByteArray(Object obj)
    {
        if(obj == null)
            return null;
        BinaryFormatter bf = new BinaryFormatter();
        MemoryStream ms = new MemoryStream();
        bf.Serialize(ms, obj);
        return ms.ToArray();
    }

    private void memcpy(byte[] dest, int pos, object src, int len)
    {
        byte[] ba = ObjectToByteArray(src);
        Array.Copy(ObjectToByteArray(src), 0, dest, pos, len);
    }
4

2 に答える 2

3

あなたが何を望んでいるのか明確ではありませんが、これは役に立ちますか?

int yourInt32 = ...;
byte[] bitsFromInt32Value = BitConverter.GetBytes(yourInt32);

long yourInt64 = ...;
byte[] bitsFromInt64Value = BitConverter.GetBytes(yourInt64);
于 2013-07-06T16:17:02.943 に答える
0

msdn から取得:

ポインター型はオブジェクトから継承されず、ポインター型とオブジェクトの間に変換は存在しません。また、ボックス化とボックス化解除はポインタをサポートしていません。ただし、異なるポインター型の間、およびポインター型と整数型の間で変換することはできます。

リンク: http://msdn.microsoft.com/en-us/library/y31yhkeb(v=vs.100).aspx

            int number = 200;

            unsafe
            {
                // Convert to byte:
                byte* p = (byte*)&number;
            }
于 2013-07-06T15:45:03.767 に答える