繁体   English   中英

将流字节转换为字符串

[英]Convert stream bytes to string

我正在使用Google协议缓冲区将一些数据从C ++服务器发送到IOS应用。 我在IOS端使用此功能将流字节转换为字符串:

-(NSString*)convertStreamBytesToString:(NSMutableData*)data
{
    int len = [data length];
    char raw[len];

    [data getBytes:raw length:len];
    NSString *protocStruct =[[NSString alloc] initWithBytes:raw length:len encoding:NSUTF8StringEncoding];

    return protocStruct;

}

我的问题是有时候这行不通。 我可以看到我发送和接收了所有字节,但是在转换时,其中一些丢失了。 例如,我得到83个字节,但是在打印字符串时,我得到了大约20个字符。 其余在哪里? 我不知道这种转换方法有什么问题吗?

NSString是用于处理Unicode字符串的类。 您不能像C字符串那样在其中存储任意字节。 (即使那样,您也可能无法代替字符串来传输二进制数据,并期望它在传输中幸存下来)

您将需要将二进制数据转换为字符串,从而产生有效的文本字符串。 例如,通过Base64编码。

您可以使用Google来编码/解码Base64的许多iOS项目。

这是关于它的文章: http : //www.cocoawithlove.com/2009/06/base64-encoding-options-on-mac-and.html?m=1

在obj-c中在堆栈上分配C数组有时会导致错误。 尝试对char数组使用动态内存:

char* raw = (char*)malloc(len*sizeof(char));

然后释放它:

free(raw);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM