Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cli C/C++;DLL:将常量uint8\t转换为字符串 我在10多年中还没有看到C++代码,现在我需要开发一个非常小的DLL来使用类(System::NET:NETWORKIONS)< /C> >对一些代码>远程地址> /代码>进行ping。p>_C++ Cli_String Conversion_Ane - Fatal编程技术网

C++ cli C/C++;DLL:将常量uint8\t转换为字符串 我在10多年中还没有看到C++代码,现在我需要开发一个非常小的DLL来使用类(System::NET:NETWORKIONS)< /C> >对一些代码>远程地址> /代码>进行ping。p>

C++ cli C/C++;DLL:将常量uint8\t转换为字符串 我在10多年中还没有看到C++代码,现在我需要开发一个非常小的DLL来使用类(System::NET:NETWORKIONS)< /C> >对一些代码>远程地址> /代码>进行ping。p>,c++-cli,string-conversion,ane,C++ Cli,String Conversion,Ane,我接收到远程地址的参数是,然后需要将其转换为常量uint8*。前一个是强制性的,我不能改变任何东西。remoteAddress必须作为FREObject接收,然后在const uint8*中进行转换 我遇到的问题是,我必须将String^传递给Ping类,而不是constuint8*并且我不知道如何将constuint8*转换为String^。你有什么想法吗 下面是我代码的一部分: // argv[ARG_IP_ADDRESS_ARGUMENT holds the remoteAddress v

我接收到
远程地址的参数是,然后需要将其转换为
常量uint8*
。前一个是强制性的,我不能改变任何东西。
remoteAddress
必须作为
FREObject
接收,然后在
const uint8*
中进行转换

我遇到的问题是,我必须将
String^
传递给
Ping
类,而不是
constuint8*
并且我不知道如何将
constuint8*
转换为
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);
基本上,该函数使用
argv[ARG\u IP\u ADDRESS\u参数]
的值填充
nativecharray
数组,并返回
nativecharraylelength
中数组的长度。此外,字符串使用UTF-8编码,以空字符结尾

我的下一个问题是将
字符串^
转换回
常量8\u t*
。如果你也能帮我,我会非常感激

正如我之前所说的,这其中的一部分是可变的,我不知道如何将
nativecharray
更改为
String^
。任何建议都会有帮助


另外,此DLL的目的是将其用作我的Adobe Air应用程序的ANE(Air本机扩展)。

您需要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);
auto converter=gcnew System::Text::UTF8Encoding;
自动字符=转换器->GetCharCount((字节*)NativeCharray,NativeCharrayLength-1);
自动缓冲区=新阵列(字符);
pin_ptr pbuffer=&缓冲区[0];
converter->GetChars((字节*)nativecharray,nativecharralylength-1,pbuffer,chars);
字符串^result=gcnew字符串(缓冲区);

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

要将
常量uint8\t
数组转换为字符串,需要包含“stdlib.h”。然后,执行以下操作:
string adrs=(const char*)nativecharray
。这将为您提供一个字符串对象。另一方面:stdlib.h中的String类定义了一个名为c_str()的函数。你可以这样使用:<代码> Unt8*t*ADRSOTHORATORY =(const Unt8*t*),(cScript())/>代码> @ ErgReST我在C++中写了一个DLL,但是代码的一部分是在C.@ StRoO是你的问题C问题还是C++问题?<代码>我在10多年没有看到C++代码,现在是< /Cord>,你在这个问题中的代码不是C++。(参考
String^
)@DodgerThud谢谢你的建议。我试过了,在加入stdlib.h后得到了错误“String”标识符未定义。非常感谢发布您的答案,但我使用帖子上的第一条注释解决了它,因此,我没有尝试过您的解决方案。嗯,这不会从utf-8转换,也不会生成字符串。^。我当然只能回答实际问到的问题。您是对的。我使用了以下方法:
std::String stdStringIPAddress=(const char*)NativeCharray;字符串^ipAddress=gcnew字符串(stdStringIPAddress.c_str())
。正如您所看到的,这要简单得多。当然,如果您完全忽略处理utf-8编码文本的要求,这会更简单。您会回来的。如果我只以以前验证过的字符串形式发送IP地址,为什么您认为我会有问题?