Objective c 将NSData拆分为三个块-最终得到的字节数比我开始时多

Objective c 将NSData拆分为三个块-最终得到的字节数比我开始时多,objective-c,byte,nsdata,nsrange,nsuinteger,Objective C,Byte,Nsdata,Nsrange,Nsuinteger,我有一个具有视频上传功能的iOS应用程序。我需要上传视频数据到一个服务器,有非常具体的上传要求:最大文件大小15 MB,文件上传必须通过不超过5 MB的块上传 我正在使用subdataWithRange将视频文件拆分为三个NSData块。这样,无论文件的总大小如何,文件块都不会超过5MB。我将NSData对象分成三个块并检查了大小,结果发现我得到了更多的字节。我知道我是一种特别的傻瓜 这是我的密码: // Get the video data object. NSData *postData =

我有一个具有视频上传功能的iOS应用程序。我需要上传视频数据到一个服务器,有非常具体的上传要求:最大文件大小15 MB,文件上传必须通过不超过5 MB的块上传

我正在使用
subdataWithRange
将视频文件拆分为三个
NSData
块。这样,无论文件的总大小如何,文件块都不会超过5MB。我将NSData对象分成三个块并检查了大小,结果发现我得到了更多的字节。我知道我是一种特别的傻瓜

这是我的密码:

// Get the video data object.
NSData *postData = [self getAttachmentData];

// Get the file size in bytes.
NSUInteger fileSizeBytes = [postData length];

// Split the video into three chunks.
NSData *chunkOne = [postData subdataWithRange:NSMakeRange(0, (fileSizeBytes / 3))];
NSData *chunkTwo = [postData subdataWithRange:NSMakeRange([chunkOne length], ((fileSizeBytes / 3) * 2))];
NSData *chunkThree = [postData subdataWithRange:NSMakeRange([chunkTwo length], (fileSizeBytes - [chunkTwo length]))];

NSLog(@"fileSizeBytes: %lu", (unsigned long)fileSizeBytes);
NSLog(@"\n\n");
NSLog(@"chunckOne: %lu", (unsigned long)[chunkOne length]);
NSLog(@"chunckTwo: %lu", (unsigned long)[chunkTwo length]);
NSLog(@"chunckThree: %lu", (unsigned long)[chunkThree length]);
NSLog(@"\n\n");
NSLog(@"chunkTotal: %lu", ((unsigned long)[chunkOne length] + (unsigned long)[chunkTwo length] + (unsigned long)[chunkThree length]));
以下是输出日志:

fileSizeBytes: 2132995

chunckOne: 710998
chunckTwo: 1421996
chunckThree: 710999

chunkTotal: 2843993
那么我做错了什么?我相信我已经正确设置了范围,因此对象被分为三个块

谢谢你的时间,丹。

范围是(开始,长度)而不是(开始,结束)。你可以: (0, 710998), (710998, 1421996), (1421996, 710999). 它应该是:(0710998),(710998710998)和(1421996710999)

范围是(开始,长度)而不是(开始,结束)。你可以: (0, 710998), (710998, 1421996), (1421996, 710999). 它应该是:(0710998),(710998710998)和(1421996710999)

NSUInteger chunkSizeBytes = (fileSizeBytes / 3)
NSData *chunkOne = [postData subdataWithRange:NSMakeRange(0, chunkSizeBytes)];
NSData *chunkTwo = [postData subdataWithRange:NSMakeRange(chunkSizeBytes, chunkSizeBytes)];
NSData *chunkThree = [postData subdataWithRange:NSMakeRange(chunkSizeBytes * 2, fileSizeBytes - (chunkSizeBytes * 2))];