Я пытаюсь преобразовать NSStrings в байтовые массивы, а затем обратно в NSStrings. Я пытался с NSUnicodeEncoding и NSUTF8StringEncoding. Мой вопрос заключается в том, что когда я перебираю байтовые массивы, я вижу разные данные
Единственное изменение в этом коде состоит в том, что я заменяю NSUTF8StringEncoding на NSUnicodeEncoding и добавляю dataLength + = 2, чтобы он учитывал спецификацию.
NSString *message = @"testing";
NSUInteger dataLength = [message lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
void *byteData = malloc( dataLength );
NSRange range = NSMakeRange(0, [message length]);
BOOL result = [message getBytes:byteData maxLength:dataLength usedLength:&actualLength encoding:NSUTF8StringEncoding options:0 range:range remainingRange:&remain];
for( NSUInteger x = 0; x < dataLength; x++ )
{
NSLog( @"byte data: %s", (char *)byteData);
int t = (int)*(char *)byteData;
byteData++;
}
Разница в NSLog:
Как NSUTF8StringEncoding я вижу
- testing`
- esting`
- sting`
- ting`
- ...
Как NSUnicodeEncoding я вижу
Значение int t является правильным для данного символа, но я не понимаю, почему byteData так отличается. Я ожидал бы, что они оба будут действовать как NSUnicodeEncoding.