数组<byte> ^和字节*?</byte>之间的区别是什么

时间:2011-05-10 09:46:22

标签: visual-studio-2010 managed-c++

是否可以投射阵列&lt;字节&gt; ^到一个字节*?

如何更改以下代码以返回字节*?

array<Byte>^ StrToByteArray(System::String^ unicodeString)
{
    UTF8Encoding^ utf8 = gcnew UTF8Encoding;
    array<Byte>^ encodedBytes = utf8->GetBytes( unicodeString );
    return encodedBytes;
}

2 个答案:

答案 0 :(得分:2)

array ^是托管堆中对象的句柄,byte *是指向非托管字节的指针。您无法在它们之间进行转换,但可以修复托管数组并获取指向其中元素的指针。

编辑以回应第一条评论:

以下是从msdn

上的this page获取的代码示例

您最感兴趣的是void Load()方法。在这里,他们固定数组,并指向其中的第一个元素......

// pin_ptr_1.cpp
// compile with: /clr 
using namespace System;
#define SIZE 10

#pragma unmanaged
// native function that initializes an array
void native_function(byte* p) {
    for(byte i = 0 ; i < 10 ; i++)
        p[i] = i;
}
#pragma managed

public ref class A {
private:
    array<byte>^ arr;   // CLR integer array

public:
    A() {
        arr = gcnew array<byte>(SIZE);
    }

    void load() {
        pin_ptr<byte> p = &arr[0];   // pin pointer to first element in arr
        byte* np = p;   // pointer to the first element in arr
        native_function(np);   // pass pointer to native function
    }

    int sum() {
        int total = 0;
        for (int i = 0 ; i < SIZE ; i++)
            total += arr[i];
        return total;
    }
};

int main() {
    A^ a = gcnew A;
    a->load();   // initialize managed array using the native function
    Console::WriteLine(a->sum());
}

答案 1 :(得分:0)

不,你不能强制转换它,但是数组有一个返回名为“data()”的原始数组的方法

编辑:nvm,以为你在谈论stl类数组。