如何将std :: string转换为NSData,反之亦然?

时间:2014-11-06 17:13:04

标签: ios c++11 cocos2d-x google-play-games cocos2d-x-3.0

我正在使用Google协议缓冲区通过Google Play游戏服务iOS sdk在cocos2d-x多人游戏中发送和接收数据。

协议缓冲区将数据转换为std :: string,但GPGS iOS sdk通过NSData发送数据,因此我必须从std :: string转换为NSData,然后在接收数据后返回std :: string。

我目前正在使用以下方法:

std :: string to NSData NSData to std :: string 将在不同时间在不同的函数中完成。以下代码总结了我在做什么)

//PlayerData is protocol buffer class
PlayerData data, temp;

std::string dataStr;
data.SerializeToString(&dataStr);

NSString* nsDataStr = [NSString stringWithCString:dataStr.c_str()
                        encoding:[NSString defaultCStringEncoding]];

NSData* nsData = [nsDataStr dataUsingEncoding:NSUTF8StringEncoding];

NSString* dataStr_2 = [[NSString alloc] initWithData:nsData
                        encoding:NSUTF8StringEncoding];

std::string foo = [dataStr_2 UTF8String];

temp.ParseFromString(foo);

序列化后的初始字符串,即dataStr

“\ r \ x95n \ x99D \ x158 \ xddNDJ \ nUmar SaeedR \ x12p_CPH64oqq2K-TXxAB”

尺寸:42

解析前的最终字符串,即foo

“\ r \ xc3 \ xafn \ xc3 \ xb4D \ x158 \ xe2 \ x80 \ xbaNDJ \ nUmar SaeedR \ x12p_CPH64oqq2K-TXxAB”

尺寸:46

协议缓冲区的ParseFromString函数不解析foo并返回false。

如何进行字符串转换以使字符串保持不变?

2 个答案:

答案 0 :(得分:0)

我知道这很老了,但是...您能用protobufs ParseFromArray代替ParseFromString吗?

IE

initial begin
   ...
   @(posedge Clk); #1;
   $top.u_foo.u_bar.u_cell.Glitch = 1'b1;
   @(posedge Clk); #1;
   $top.u_foo.u_bar.u_cell.Glitch = 1'b1;
   ...
end

只是一个想法。

答案 1 :(得分:0)

试试这个:

std::string str = "123";
NSData *data = [NSData dataWithBytes:str.data() length:str.length()];