将 System::Byte 的锯齿状数组转换为无符号字符**
convert jagged array of System::Byte to unsigned char**
我想实现一个 C++\CLI 函数,将 System::Byte 的锯齿状数组转换为无符号字符**。
我做了这个:
unsigned char** NUANCECLR::IsItYou::convertBBtoCC(array<array<System::Byte>^>^ b)
{
unsigned char** x = NULL;
for (size_t indx = 0; indx < b->Length; indx++)
{
if (b[indx]->Length > 1)
{
pin_ptr<System::Byte> p = &b[indx][0];
unsigned char* pby = p;
char* pch = reinterpret_cast<char*>(pby);
x[indx] = reinterpret_cast<unsigned char *>(pch);
}
else
x[indx] = nullptr;
}
return x;
}
我目前无法测试,也许有人可以帮助我,告诉我是否可以,因为我比较需要fast.Thank你!
不行。这将以多种不同的方式在你面前鞠躬:
unsigned char** NUANCECLR::IsItYou::convertBBtoCC(array<array<System::Byte>^>^ b)
{
unsigned char** x = NULL;
没有分配存储空间。 x[anything]
将无效。
for (size_t indx = 0; indx < b->Length; indx++)
{
if (b[indx]->Length > 1)
{
pin_ptr<System::Byte> p = &b[indx][0];
如果阻止并取消固定,此固定指针将在结束时超出范围。系统可能会再次随意移动或删除
unsigned char* pby = p;
这需要一个指向围绕一个字节的对象包装器数组的指针,并将其分配给 char
的数组。我不会在这里声称专业知识,但我不相信如果没有很多隐藏的巫术,这将无法透明地工作。
char* pch = reinterpret_cast<char*>(pby);
这实际上会起作用,但因为之前的可能不起作用,我不希望 pch
指向任何有意义的东西。
x[indx] = reinterpret_cast<unsigned char *>(pch);
如上所述,x
不指向任何存储。这是注定的。
}
else
x[indx] = nullptr;
也注定了
}
return x;
仍然注定要失败。
}
推荐:
- 使用
new
为大小为 b->Length
的 char *
数组分配非托管存储并分配给 x
- 为大小为
b[indx]->Length
的 char
数组分配 new
非托管存储,并将 b
的所有元素复制到其中,然后分配给 x[indx]
.
- return
x
- 确保
x
和 x
指向的所有数组在您用完后都被删除。或者使用 vector<vector<char>>
而不是 char**
。
我想实现一个 C++\CLI 函数,将 System::Byte 的锯齿状数组转换为无符号字符**。 我做了这个:
unsigned char** NUANCECLR::IsItYou::convertBBtoCC(array<array<System::Byte>^>^ b)
{
unsigned char** x = NULL;
for (size_t indx = 0; indx < b->Length; indx++)
{
if (b[indx]->Length > 1)
{
pin_ptr<System::Byte> p = &b[indx][0];
unsigned char* pby = p;
char* pch = reinterpret_cast<char*>(pby);
x[indx] = reinterpret_cast<unsigned char *>(pch);
}
else
x[indx] = nullptr;
}
return x;
}
我目前无法测试,也许有人可以帮助我,告诉我是否可以,因为我比较需要fast.Thank你!
不行。这将以多种不同的方式在你面前鞠躬:
unsigned char** NUANCECLR::IsItYou::convertBBtoCC(array<array<System::Byte>^>^ b)
{
unsigned char** x = NULL;
没有分配存储空间。 x[anything]
将无效。
for (size_t indx = 0; indx < b->Length; indx++)
{
if (b[indx]->Length > 1)
{
pin_ptr<System::Byte> p = &b[indx][0];
如果阻止并取消固定,此固定指针将在结束时超出范围。系统可能会再次随意移动或删除
unsigned char* pby = p;
这需要一个指向围绕一个字节的对象包装器数组的指针,并将其分配给 char
的数组。我不会在这里声称专业知识,但我不相信如果没有很多隐藏的巫术,这将无法透明地工作。
char* pch = reinterpret_cast<char*>(pby);
这实际上会起作用,但因为之前的可能不起作用,我不希望 pch
指向任何有意义的东西。
x[indx] = reinterpret_cast<unsigned char *>(pch);
如上所述,x
不指向任何存储。这是注定的。
}
else
x[indx] = nullptr;
也注定了
}
return x;
仍然注定要失败。
}
推荐:
- 使用
new
为大小为b->Length
的char *
数组分配非托管存储并分配给x
- 为大小为
b[indx]->Length
的char
数组分配new
非托管存储,并将b
的所有元素复制到其中,然后分配给x[indx]
. - return
x
- 确保
x
和x
指向的所有数组在您用完后都被删除。或者使用vector<vector<char>>
而不是char**
。