![](/img/trans.png)
[英]Swift 3: how to convert a UTF8 data stream (1,2,3 or 4 bytes per char) to String?
[英]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.