将锯齿数组的System :: Byte转换为unsigned char **

时间:2016-08-12 20:44:27

标签: c++ arrays byte clr

我想实现一个C ++ \ CLI函数,它将System :: Byte的锯齿状数组转换为unsigned char **。 我做了这个:

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;
}

我目前无法测试,也许有人可以帮助我,告诉我它是否合适,因为我需要它相对较快。谢谢!

1 个答案:

答案 0 :(得分:1)

不行。这将以多种不同的方式在你的脸上鞠躬:

dbo.GetPastQtr_fn (20154,7)

未分配存储空间。 20141无效。

unsigned char**     NUANCECLR::IsItYou::convertBBtoCC(array<array<System::Byte>^>^ b)
{
    unsigned char** x = NULL; 

这个pining指针将超出此if块结尾的范围并取消固定。系统可以再次随意移动或删除

x[anything]

这将指向一个字节周围的对象wappers数组,并将其分配给 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;

建议:

  1. 使用 } return x; } 数组new分配非托管存储,并分配给char *
  2. 使用b->Lengthx大小new数组分配非托管存储空间,并将char的所有元素复制到其中,然后分配给b[indx]->Length
  3. return b
  4. 确保x[indx]指向的所有数组,然后x在您完成后删除。或使用x代替x