gpt4 book ai didi

objective-c - 从 NSMutableArray 中的 C-Struct 获取值

转载 作者:行者123 更新时间:2023-12-03 17:39:04 24 4
gpt4 key购买 nike

这个问题在 SO 中被问过几次,最重要的两个答案是:

What's the best way to put a c-struct in an NSArray?

How can I create an NSMutableArray of structs?

Apple 文档也显示了此过程:

https://developer.apple.com/library/mac/documentation/cocoa/Conceptual/NumbersandValues/Articles/Values.html

共识似乎是通过 NSValue 将结构体转换为对象。遵循此建议时我的问题是,当我取回数据时,我得到了虚假结果。

我的结构非常简单:

typedef struct { uint8_t r, g, b, a; } Pixel;

正如上面链接中所解释的,我可以将其添加到数组中

NSMutableArray *ledColors;

通过以下方式使用 NSValue:

    Pixel p_in = {0,0,0,1};
NSLog(@"Pixel in: %d %d %d %d",p_in.r,p_in.g,p_in.b, p_in.a);

NSValue *p_obj = [NSValue valueWithBytes:&p_in objCType:@encode(Pixel)];
// NSValue *p_obj = [NSValue value:&p_in withObjCType:@encode(Pixel)]; //this seems to work too.


for (int i=0; i<numLeds; i++) {
[ledColors addObject:p_obj];
}

但是,当我按照上面链接的帖子中所述检索/获取数据时,我没有得到原始的 {0,0,0,1} 而是随机整数:

    Pixel p_out;
[[ledColors objectAtIndex:0] getValue:&p_out];

// Doesn't return the correct data
NSLog(@"Pixel out: %d %d %d %d",p_out.r,p_out.g,p_out.b, p_out.a);

最佳答案

我刚刚运行了下面的代码,一切正常,这让我认为问题出在其他地方。

Pixel p_in = {0,0,0,1};
NSLog(@"Pixel in: %d %d %d %d",p_in.r,p_in.g,p_in.b, p_in.a);
NSValue* v_in = [NSValue valueWithBytes:&p_in objCType:@encode(Pixel)];

NSMutableArray* arr = [NSMutableArray array];
[arr addObject:v_in];

Pixel p_out = {3,3,3,3};
[[arr objectAtIndex:0] getValue:&p_out];
NSLog(@"Pixel out: %d %d %d %d",p_out.r,p_out.g,p_out.b, p_out.a);

我的猜测是,当您尝试将对象取出时,ledColorsnil,这不会执行任何操作,并且会在 中留下未初始化的内存p_out

关于objective-c - 从 NSMutableArray 中的 C-Struct 获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25716296/

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