2010-12-22 45 views
1

我期待使用Zimt庫和ZTWebSocket類有一個接受的NSString與此簽名一個「發送」方法:UTF8的NSString和Zimt的ZTWebSocket

- (void)send:(NSString *)message; 

我想沿着數據作爲UTF8發送字符串,但該方法只接受常規的NSString。我該怎麼做才能避免編譯器警告?我可以從UTF8轉換爲常規字符串嗎?

websocket = [[ZTWebSocket alloc] ...]; 

// 1) this will also generate a warning about incompatible pointer type for the arguments 
[websocket send:[message UTF8String]]; 

// 2) what happens during transmission if I cast this back to a regular string? 
[websocket send:(NSString *)[message UTF8String]]; 

回答

1

不能使用-UTF8String,因爲它返回一個標準的C const char *,不是NSString

您正在使用的框架需要公開一個用於更改編碼的方法,因爲它必須使用某種編碼從某個點處的字符串獲取字節(除非它使用不指定編碼的過時方法)。

總之,說話,誰做的框架,並詢問他們的意見的傢伙;)

編輯|我剛剛在github.com上看過the source,實際上它使用UTF8進行硬編碼,所以你沒問題。

摘錄:

-(void)send:(NSString*)message { 
    NSMutableData* data = [NSMutableData data]; 
    [data appendBytes:"\x00" length:1]; 
    [data appendData:[message dataUsingEncoding:NSUTF8StringEncoding]]; 
    [data appendBytes:"\xFF" length:1]; 
    [socket writeData:data withTimeout:-1 tag:ZTWebSocketTagMessage]; 
}