【发布时间】:2020-02-26 02:20:09
【问题描述】:
我正在转换旧版 C++ 代码,需要 C# 中等效的 memcpy_s 的帮助。我需要将一个指针中的数据复制到另一个指针,如此 C++ 代码中所示。
我根据谷歌尝试了 C++ CopyMemory、Array.Copy 和其他方法,但它们似乎都没有帮助。我想在 C# 中转换下面显示的以下代码的等效项。任何帮助将不胜感激。
memcpy_s((char*)pDIB + sizeof(BITMAPINFOHEADER), bmpHeader.biSizeImage,
pRawData, bmpHeader.biSizeImage);
此代码获取指针并添加 BITMAPHeader 的大小并向其添加另一个指针数据。我在 C# 中没有看到任何 Marshal.PointerToPointer 并且不知道如何编写。
【问题讨论】:
-
建议:不要按字面翻译代码。 You wind up with garbage all too often,而且运行的程序几乎总是很差。要获得好的结果,您需要做的是充分了解源程序的行为,并在新语言中重新实现该行为,充分利用该新语言的结构、库和习语。
-
如果您要远离 C++,最好使用 C#/.NET 的处理方式重写代码,而不是尝试使用指针和这样,否则您不妨将代码留在 C++ 中。
-
例如,如果 .Net 库还没有您可以使用的位图文件读取器/写入器,我会感到非常惊讶。
-
这段代码是获取指针并添加 BITMAPHeader 的大小并为其添加另一个指针数据 -- 您需要在更高层次上理解代码。您的 C++ 代码显示了 C 或 C++ 中的低级 BMP 处理。对于 .NET 语言没有必要去低级,因为处理图像和位图应该在一个或多个 .NET 类中可用。
-
看起来您正在从位图结构复制原始图像数据。此数据将在 C# 中存储为字节数组,因此请使用
Array.Copy()。