簡體   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