[英]escaped std::string to NSString*
我有:
std::string string = "\\xae\\xab\\xe30"
(在“\\ xe30”序列繼續之后)。
在iOS設備上為音樂文件創建指紋后,此數據來自echoprint-ios庫。 該字符串包含zlib
壓縮的base64
序列。
UPD:有時這個字符串可以是.$\\x18\\x8a\\x03
,我也需要你的答案。
我需要:
將此字符串解析為NSString*
並將其傳遞給NSURL
以對echoprint服務進行查詢。
怎么了:
我無法通過很多方法從這個std::string
解析NSString*
對象:
通過[NSString stringWithCString:string.c_str() encoding:NSUTF8StringEncoding]
創建NSString對象[NSString stringWithCString:string.c_str() encoding:NSUTF8StringEncoding]
- 它在UTF8上返回nil
,類似於我需要但使用UTF16 / 32編碼的不正確數據(但這絕對錯誤,它應該是ascii / utf8 string imo),或者使用NSAsciiStringEncoding,它在NSString對象數據中放置了不可讀的符號(比如來自系統符號表)。
獲取輸入標准c-string的任何方法(因此它將是string.c_str()
)
恢復:
我需要幫助將此字符串轉換為NSString對象。
std::string string = "\xae\xab\xe30";
NSString * cocoaString = [NSString stringWithFormat:@"%s",string.c_str()];
要么
NSString * cocoaString = [NSString stringWithCString:string.c_str() encoding:NSUTF8StringEncoding];
請記住,在c ++中你可以在字符串中保留空字符...但是在NSString中不會被視為有效,如果需要保留任意數據,NSData對象將更好地工作。
數據示例:
NSData * d = [NSData dataWithBytes:(void *) string.c_str() length:string.length()];
這將封裝任意二進制數據而不考慮格式。
我忘了檢查明顯,e30(16)相當於3632(10)。 該值顯然大於256,可以容納8個字節。 所以確實存在錯誤,編譯器是對的!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.