소켓으로 작업 중이며 단순히 문자열을 소켓에 쓰려고합니다. 다음 예제 (oStream은 NSOutputStream
)와 같이이 작업을 수행하는 방법에 대한 몇 가지 예제를 발견했습니다. 이것은 모두 NSStreamEventHasSpaceAvailable
내에 있습니다.uint8_t 버퍼에 NSString 넣기
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 행에 대한 경고가 표시됩니다. 캐스트없이 포인터에서 정수를 만듭니다. "
죄송합니다. 이전에 질문을 받았다면 검색에서 답변을 찾을 수 없으므로 문제를 해결하는 것이 매우 간단해야합니다. 감사!
편집 : 나는 작동하는 것 같다 뭔가를 발견했습니다,하지만이 같은 적절한 프로그램이 있는지 잘 모르겠어요. 아래 답변을 참조하십시오. 이 상황에서 위험한 코드를 사용하고 있습니까?
인수 5는 정수 (사실 NSNSEncodingConversionOptions 열거 형의 멤버이거나 열거 형 멤버의 조합)에 대한 것이고 NULL을 전달하면'(void *) '로 확장됩니다. 0 '이다. 경고를 닫으려면 0을 전달하십시오. (그래도 문제가 해결되지는 않습니다.) – zneak
감사합니다. 그건 경고를 없애 버렸지 만, 당신이 말했듯이 실제 문제는 해결하지 못했습니다. 그것은 앞으로 나아가 야 :) – mjdth