我正在使用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。
如何进行字符串转换以使字符串保持不变?
答案 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()];