Я работаю с сокетами и пытаюсь просто написать строку в сокет. Я нашел пару примеров того, как это сделать, например следующий пример (oStream — это NSOutputStream
). Это все в пределах NSStreamEventHasSpaceAvailable
.
uint8_t buffer[11] = "I send this";
int len;
len = [oStream write:buffer maxLength:sizeof(buffer)];
Это прекрасно работает. Поэтому я попытался изменить его, чтобы сделать его настраиваемым, получив байты из NSString.
int len;
NSString* strId;
strId = @"string will be customized with several lines of code here";
uint8_t buffer[[strId lengthOfBytesUsingEncoding:NSASCIIStringEncoding]];
[strId getBytes:buffer maxLength:sizeof(buffer) usedLength:NULL encoding:NSASCIIStringEncoding options:NULL range:NSRangeFromString(strId) remainingRange:NULL];
len = [oStream write:buffer maxLength:sizeof(buffer)];
Это вообще не работает. Он записывает в буфер полную тарабарщину (вероятно, байты), и я получаю предупреждение для строки getBytes о том, что «передача аргумента 5 из getBytes создает целое число из указателя без приведения».
Извините, если об этом уже спрашивали раньше, не удалось найти ответ в поиске, и похоже, что проблема должна быть очень простой для решения. Спасибо!
EDIT: Я нашел что-то, что кажется работающим, но я не уверен, что это правильное программирование чего-то подобного. Пожалуйста, смотрите ответ ниже. Этот опасный код следует использовать в этой ситуации?
options
должно быть целым числом (фактически членом перечисленияNSStringEncodingConversionOptions
или комбинацией членов указанного перечисления), и вы передаете NULL, который расширяется до(void*)0
. Передайте его ноль, чтобы закрыть предупреждение. (Однако это не решит вашу проблему.) - person zneak   schedule 23.02.2010