我使用外部库来处理 2 个应用程序之间的 udp (OSC) 通信。要格式化将要发送的消息,该库需要一个 char*,但我从 UI 中得到一个必须转换的字符串。
当我处理代码的其他部分时,udp 部分是这样硬编码的:
char* endofMess = "from setEndMess";
并且工作正常。我认为很容易让它与我的字符串一起工作并写道:
std::string s = "from setEndMess";
char* endofMess = const_cast<char*>(s.c_str());
但与第一个示例不同,我收到的消息格式正确,现在我只收到乱码。有人知道它来自哪里吗?
谢谢!
马蒂厄
编辑:我使用的代码:每次 OSCVal 发送消息的方法都会改变:
void osc500::testOSC(int identifier, float OSCval)
{
UdpTransmitSocket transmitSocket( IpEndpointName( destIP, port ) );
char buffer[1024];
osc::OutboundPacketStream p( buffer, 1024 );
p << osc::BeginBundleImmediate
<< osc::BeginMessage( endofMess )
<< OSCval << osc::EndMessage
<< osc::EndBundle;
transmitSocket.Send( p.Data(), p.Size() );
}
如果我必须改变 OSC 模式,我称之为:
void osc500::setEndMess(String endpattern){
// endofMess = "from setEndMess"; //OK works fine each time it's called
//1st try :
//std::string s = "from setEndMess";
//endofMess = const_cast<char*>(s.c_str()); //gibberish
//2nd try :
//std::string s = "from setEndMess";
//endofMess = &s[0]; //gibberish
//3rd & 4th tries :
//char s[4] = {'t','e','s','t'};
//char s[5] = {'t','e','s','t','\0'};
//endofMess = s; //gibberish
}