내 문제는 다음과 같습니다. NSMutableData 객체에 NSString을 캡슐화하고 싶습니다. 하지만 다른 항목과 함께 그리고 NSData에 캡슐화하지 않고 함께하고 싶습니다. 그것은 결국 바이트가 아닙니다.NSString NSData로 변환없이 NSString
내 최종 NSMutableData 개체는 header
는 문자이고 stringLength
가 서명되지 않은 짧은
[header | stringLength | NSString]
처럼 보일 것입니다. 나는이
unsigned short stringLength = myString.length;
NSMutableData* nData = [NSMutableData dataWithBytes:(const void*)&header length:sizeof(char)];
[nData appendBytes:(const void*)&dataLength length:sizeof(unsigned short)];
[nData appendBytes:(const void*)myString length:stringLength];
처럼 내 패킷이 내가 다음 gkSession 이상이를 보낼 것이고, 다른 쪽 끝에서 나는 고통의 아이폰에 다음 문자열 자체 추출 할 것이다 구축 : 몇 가지 이유를 들어
NSString* temp = [NSString alloc];
[data getBytes:(void*)&temp range:NSMakeRange(sizeof(char)+sizeof(unsigned short), stringLenght)];
를이 나에게 나쁜 메모리 접근을주고있다. 나는 myString.length
이 내가 기대하는 바를 정확하게 수행하지 못하고 있다고 생각합니다. 어떤 힌트가 있습니까? 미리 감사드립니다.
감사합니다. Rob! 이 시점의 다음 질문은 다음과 같습니다. 어떻게 문자열을 안전하게 언팩 할 수 있습니까? UTF8String으로 포장했지만,'[data getBytes : (void *) tmpString range : NSMakeRange (rangeBegin, rangeLength)];'를 할 때 다른 쪽에서 중단 신호를 받는다. 나는'tmpString'을'NSMutableString * tmpString = [NSMutableString stringWithCapacity : rangeLength];'로 선언했다. 어쩌면 인코딩 때문일까? 'tmpString'을 채우려는 인코딩의 종류는 무엇입니까? – ticofab
나는 길을 찾은 것 같아요 : 먼저 일반 버퍼의 모든 것을 덤프하고 '[[NSString alloc] initWithBytes : (const void *) 버퍼 길이 : dL 인코딩 : NSUTF8StringEncoding];'을 사용하여 원래 문자열을 다시 가져옵니다. 도와 주셔서 다시 한 번 감사드립니다! – ticofab