[英]Using char in C, pointer issue, objective C
for (int i=0; i < strlen(chars1); i++) {
//*buf=chars1[i];
NSLog(@"Received %c\n", chars1[i]);
ichar = [ NSString stringWithUTF8String:chars1[i] ];
NSLog(@"Received ", ichar);
counter=strlen(chars1)-i;
gnutls_record_send (session, [ichar UTF8String] , counter);
}
我正在嘗試使用此方法將信息發送到我的服務器,但我不斷收到警告:
警告:傳遞'stringWithUTF8String:'的參數1會使指針從整數轉換而無需強制轉換
警告是針對此行的:ichar = [NSString stringWithUTF8String:chars1 [i]];
無論如何,我可以將chars1 [i]存儲到臨時char或字符串中,並在循環中用於發送嗎?
更新
我只是在尋找一種方法來解析NSString從開始字符到結尾,然后能夠使用它而不會收到以下警告:
使指針從整數開始而無需強制轉換
您不能一次解析UTF8一個字符(對應關系不是一對一的)。 正確的解決方案取決於您正在解析的協議,該協議應指定如何確定字符串開始和結束的時間。 按照協議將完成的字符串標識為原始字節數組, 然后將其解析為UTF8以將其轉換為字符串。
您不需要從char數組中取出單個元素,然后執行所有操作。 NSString中有一個類方法,
+ (id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc
cString
A C array of bytes. The array must end with a NULL character; intermediate NULL characters are not allowed.
//Use this
NSString* tempString = [NSString stringWithCString:chars1 encoding:NSUTF8StringEncoding];
chars [i]的結果將是單個char,而不是字符串。 您不能將其傳遞到NSString stringWithUTFString:中,因為它需要一個以Nil結尾的C字符串,而不是單個字符。
您應該嘗試這樣的事情:
ichar = [NSString stringWithCharacters:&chars[i] length:1];
此錯誤很可能是由以下行引起的:
ichar = [ NSString stringWithUTF8String:chars1[i] ];
NSString:stringWithUTF8String:需要一個指向字符串的指針,並且您僅向其提供一個字符。
警告是告訴您在指針字段中傳遞了一個整數(單個char是整數)。 如果您嘗試運行此代碼,則結束效果會很差,因為它將嘗試讀取無效的內存。
UTF-8是一種多字節編碼格式; 您不能以這種方式對其進行迭代。 考慮將整個字符串放在NSString中,並使用Cocoa的API對其進行修改,最后在完成后將您希望與GNUTLS一起使用的字符串導出。
如果您知道您的字符串是UTF8,請使用– initWithUTF8String:
創建NSString對象,然后如果需要獲取單個字符,請使用– characterAtIndex:
– initWithUTF8String:
其他方法在這里:
也許這就是您想要的。
NSString *unicodeString = [NSString stringWithUTF8String:chars1];
for (int i=0; i < [unicodeString length]; i++) {
NSString *ichar = [unicodeString substringWithRange:NSMakeRange(i, 1)];
NSLog(@"Received %@", ichar);
counter=strlen(chars1)-i;
gnutls_record_send (session, [ichar UTF8String] , counter);
}
這將采用在chars1中以UTF-8編碼的字符串,並將每個單獨字符(本身可能是1或幾個字節)的UTF-8編碼發送到gnutls_record_send。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.