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 的目的是将其用作我的 Adobe 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 补偿值中包含的零终止符。
我已经 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 的目的是将其用作我的 Adobe 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 补偿值中包含的零终止符。