是否可以投射阵列<字节> ^到一个字节*?
如何更改以下代码以返回字节*?
array<Byte>^ StrToByteArray(System::String^ unicodeString)
{
UTF8Encoding^ utf8 = gcnew UTF8Encoding;
array<Byte>^ encodedBytes = utf8->GetBytes( unicodeString );
return encodedBytes;
}
答案 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类数组。