Если буфер имеет кодировку UTF-16, вы можете сделать это:
NSData* data = [[[NSData alloc] initWithBytesNoCopy:buffer
length:length
freeWhenDone:NO] autorelease];
NSString* result = [[NSString alloc] initWithData:data
encoding:NSUTF16LittleEndianStringEncoding];
stringWithCString
выглядит так, как будто это barfs в многобайтовых символьных буферах, останавливаясь на первом найденном NULL-байте.
[ UPDATE ]
Я подал ошибку с яблоком, и это ожидаемое поведение, очевидно . stringWithCString поддерживает только 8-битные кодировки и останавливается на первом нулевом байте.