【发布时间】:2017-11-11 12:08:20
【问题描述】:
将我的应用从 32 位更新到 64 位。
根据 Apple 文档,浮点数只有 4 个字节,我需要使用 CGFloat(8 个字节)
我正在使用memcpy 读取字节。我已将我所有的 sizeof(float)s 更新为 sizeof(CGFloat)。
但是当我这样做时,我会遇到语义问题
__builtin___memcpy_chk 总是会溢出目标缓冲区。扩展自宏
memcpy
我将NSData readDataOfLenght 更新为sizeof(CGFloat),它似乎工作正常。有时并非所有读入的数据都是正确的。
恐怕我在这方面有点不知所措,需要一些帮助。
-(void) readByteData:(NSFileHandle *)fHandle Size:(NSInteger)byteSize
{
[super readByteData:fHandle Size:byteSize];
NSData *data = [fHandle readDataOfLength:sizeof(CGFloat)];
float r;
memcpy(&r, [data bytes], sizeof(CGFloat));
self.radius = r;
int nCGPointSize = sizeof(CGFloat) * 2;
data = [fHandle readDataOfLength:nCGPointSize];
float xy[2];
memcpy(xy, [data bytes], nCGPointSize);
self.centerPos = ccp(xy[0], xy[1]);
data = [fHandle readDataOfLength:sizeof(CGFloat)];
float start_angle;
memcpy(&start_angle, [data bytes], sizeof(CGFloat));
self.startAngle = start_angle;
data = [fHandle readDataOfLength:sizeof(CGFloat)];
float end_angle;
memcpy(&end_angle, [data bytes], sizeof(CGFloat));
self.endAngle = end_angle;
data = [fHandle readDataOfLength:sizeof(int)];
int d;
memcpy(&d, [data bytes], sizeof(int));
self.dir = d;
flagClosed = YES;
}
【问题讨论】:
标签: ios objective-c 64-bit nsdata memcpy