协议缓冲区:使用字节[]从Java到Objective-C

协议缓冲区:使用字节[]从Java到Objective-C,java,objective-c,encoding,protocol-buffers,Java,Objective C,Encoding,Protocol Buffers,我目前正在使用谷歌的协议缓冲区。它可以在Java和C#之间轻松工作,但是我在尝试使用Obj-C实现同样的功能时遇到了问题 Java WS返回一个字节[]。使用协议缓冲区API的代码非常简单: productGroup.toByteArray(); 我可以使用以下方法使用双向飞碟的C#端口重新创建对象: byte[] result = searchWebService.SearchProductsProtocolBuffer(search); ProductProtoGroup products

我目前正在使用谷歌的协议缓冲区。它可以在Java和C#之间轻松工作,但是我在尝试使用Obj-C实现同样的功能时遇到了问题

Java WS返回一个字节[]。使用协议缓冲区API的代码非常简单:

productGroup.toByteArray();
我可以使用以下方法使用双向飞碟的C#端口重新创建对象:

byte[] result = searchWebService.SearchProductsProtocolBuffer(search);
ProductProtoGroup products = ProductProtoGroup.ParseFrom(result);
然而,在obj-c方面,我正在努力处理返回值

我从同一web服务RPC收到的NSString如下:

CmYKEzgwMDAwMUFELTEzMjUyNzk5MTQySUZPT0QgJiBCRV...
我不太确定该怎么办,因为我不知道它是什么,但它是从字节数组生成的。我尝试使用

NSData* data = [returnValue dataUsingEncoding:NSUTF8StringEncoding];
但是在
[ProductProtoGroup parseFromData:data]上,我得到一个
无效的rotocolbuffer

我已经在Java端检查了原始
字节[]
的字节字符串/十六进制表示形式,它与我从ws接收到的字符串不匹配

十六进制是0-F。也许每个字节都转换成了字符?不,那不匹配

任何帮助都将不胜感激


Dane

我对Objective C知之甚少,但NSString不是字节数组。您是否尝试过使用?

将NSString转换为char*了?我的思路更加清晰,并提供了一些有用的注释,最终得到了它

我想知道web服务是如何在Java中自动发送一个字节[],然后在C#later中重新构造它的,以及以后如何存储此消息

结果是字符串

CMYKEZGWMDAWMUFELTEXMJUYNZK5MTQYSUZPT0QGJIBCRV…

确实是肥皂信封里的东西。因此,在Java中创建字节[]和传输之间,发生了一些事情。查看C#中的消息处理程序

那么,base64Binary!,我承认这是我第一次见面。斯基特说这是最安全的方法:

因此,知道了编码,解决方案就变得简单了。使用问题答案中给出的算法,我的最终代码为:

NSString* returnValue = [WebServiceUtil processStringReturnValue:value];
NSData* data = [Encoding base64DataFromString:returnValue];
ProductProtoGroup* products = [ProductProtoGroup parseFromData:data];

字符串编码的源值是什么?(例如,您在Java或C中获得的字节数组)?您使用的是协议缓冲区的哪个Objective-C端口?
NSString* returnValue = [WebServiceUtil processStringReturnValue:value];
NSData* data = [Encoding base64DataFromString:returnValue];
ProductProtoGroup* products = [ProductProtoGroup parseFromData:data];