C/C++ DLL:将 const uint8_t 转换为字符串

C/C++ DLL: Converting a const uint8_t to a String

我已经 10 多年没看过 C++ 代码了,现在我需要开发一个非常小的 DLL 来使用 Ping class (System::Net::NetworkInformation)对某些 remoteAddress 执行 ping 操作。

我收到 remoteAddress 的参数是 FREObject,然后需要将其转换为 const uint8_t *。前一个是强制性的,我无法更改任何内容。 remoteAddress 必须作为 FREObject 接收,然后在 const uint8_t *.

中进行转换

我遇到的问题是我必须将 String^ 传递给 Ping class 而不是 const uint8_t * 我不知道如何传递将我的 const uint8_t * 转换为 String^。你有什么想法吗?

接下来是我的部分代码:

// argv[ARG_IP_ADDRESS_ARGUMENT holds the remoteAddress value.
uint32_t nativeCharArrayLength = 0;
const uint8_t * nativeCharArray = NULL;
FREResult status = FREGetObjectAsUTF8(argv[ARG_IP_ADDRESS_ARGUMENT], &nativeCharArrayLength, &nativeCharArray);

基本上,FREGetObjectAsUTF8 函数用 argv[ARG_IP_ADDRESS_ARGUMENT] 的值填充 nativeCharArray 数组,returns 数组的长度在 nativeCharArrayLength 中。此外,该字符串使用 UTF-8 编码以空字符终止。

我的下一个问题是将 String^ 转换回 const uint8_t *。如果您也能提供帮助,我将不胜感激。

正如我之前所说,这一切都不可更改,我不知道如何将 nativeCharArray 更改为 String^。任何建议都会有所帮助。

PS:此外,此 DLL 的目的是将其用作我的 Adob​​e Air 应用程序的 ANE(Air Native Extension)。

您需要使用 UTF8Encoding 将字节转换为字符。它有采用指针的方法,你会想利用它。你首先需要统计转换后的字符串中的字符个数,然后分配一个数组来存放转换后的字符,然后就可以变成System::String。像这样:

auto converter = gcnew System::Text::UTF8Encoding;
auto chars = converter->GetCharCount((Byte*)nativeCharArray, nativeCharArrayLength-1);
auto buffer = gcnew array<Char>(chars);
pin_ptr<Char> pbuffer = &buffer[0];
converter->GetChars((Byte*)nativeCharArray, nativeCharArrayLength-1, pbuffer, chars);
String^ result = gcnew String(buffer);

请注意,nativeCharArrayLength 上的 -1 补偿值中包含的零终止符。