gpt4 book ai didi

ios - 在 NSData 中存储 C 结构的 C 数组

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:09:30 26 4
gpt4 key购买 nike

我有一个非常简单的 C 结构,如下所示:

typedef struct {
int tag;
CGPoint position;
} Place;

也就是说,所有标量类型,结构中没有指针。

然后我得到了一组这样的点:

 Place *dynamicPlaces = calloc(numberOfPlaces, sizeof(Place));

所以 dynamicPlaces 的每个元素都应该是(除非我混淆了一些东西……我和指针当然有可能……)一个 Place 类型的结构,已初始化其所有成员都为 0,是吗?到目前为止一切顺利。

然后我尝试将该数组放入 NSData 对象中以通过网络发送(连同元素计数,未显示):

NSData *placesData = [NSData dataWithBytes:dynamicPlaces length:(sizeof(Place) * numberOfPlaces)];

我直接将数组传递给它,因为如果内存可用,指针 dynamicPlaces 实际上指向数组的第一个结构元素,然后我告诉它有多少元素通过长度。我认为这很好。

最后,另一方面,我在解码我的对象时这样做。

[receivedData getBytes:receivedDynamicPlacesArrayPointer length:[receivedData length]];

但我在该行收到了一个 EXC_BAD_ACCESS,我不太明白为什么。据我从文档中得知,这应该是将 NSData 中的字节存储到内存中复制的位置,并使用 receivedDynamicPlacesArrayPointer 指向该 blob。

这完全有可能是我在做这件事时犯了一个错误,尽管我认为我理解它们,但指针却把我绊倒了。任何帮助将不胜感激。

最佳答案

getBytes:length: 文档说:“将接收方数据开头的一些字节复制到给定的缓冲区中。”

因此您需要先自己为 receivedDynamicPlacesArrayPointer 分配内存。你这样做了吗?

换句话说,你会喜欢:

 Place* receivedDynamicPlacesArrayPointer = (Place*)malloc([receivedData length]);

关于ios - 在 NSData 中存储 C 结构的 C 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6565223/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com