簡體   English   中英

將std :: string轉義為NSString *

[英]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*對象:

  1. 通過[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對象數據中放置了不可讀的符號(比如來自系統符號表)。

  2. 獲取輸入標准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()];

這將封裝任意二進制數據而不考慮格式。

在閱讀了所有互聯網網站,論壇,博客文章等后,我想我已經找到了上述問題的原因。

我不敢相信這個字符串一直都是正確的我是對的 - 這是垃圾。 Codegen -class的C ++對象Codegen不正確。

很好地解釋這個問題。

我通過將類修改為objective-c ++類來解決codegen的這個問題。 我原來的echoprint-ios-fork的叉子在這里。 隨意獲取並使用。

此外,還發送了對父存儲庫的拉取請求。

我忘了檢查明顯,e30(16)相當於3632(10)。 該值顯然大於256,可以容納8個字節。 所以確實存在錯誤,編譯器是對的!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM