首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C数据类型的NSCoder编解码

C数据类型的NSCoder编解码
EN

Stack Overflow用户
提问于 2013-10-02 02:08:12
回答 1查看 356关注 0票数 0

我正在制作和应用程序来传输音频到接收服务器。我想要编码音频缓冲区,以便流。我创建了一个类来存储这个缓冲区和其他一些信息。当我对主对象编码后对数据进行解码时,这两个对象具有不同的音频缓冲区。

因此得出的结论是,我在编码/解码上犯了一个错误。下面是我编码缓冲区的代码

代码语言:javascript
复制
- (void)encodeWithCoder:(NSCoder *)aCoder {
    [aCoder encodeBytes:&_data length:sizeof(float *)];
    [aCoder encodeInt:_numFrames forKey:numFrames];
    [aCoder encodeInt:_numChannels forKey:numChannels];
}

注释 _data具有(float *) c数据类型

解码逻辑在这里

代码语言:javascript
复制
- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super init];
    if (self) {

        NSUInteger length = 0;
        {
            const uint8_t *buffer = [aDecoder decodeBytesForKey:data returnedLength:&length];
            assert(length);
            memcpy(&_data, buffer, length);
        }
        _numFrames = [aDecoder decodeInt32ForKey:numFrames];
        _numChannels = [aDecoder decodeInt32ForKey:numChannels];
    }
    return self;
}

我用这种方法比较它们是否相同。

代码语言:javascript
复制
- (BOOL)isEqual:(id)object {
    AudioPacket *compareObject = (AudioPacket *)object;
    return (_data == compareObject.data && _numFrames == compareObject.numFrames && _numChannels == compareObject.numChannels);
}
EN

回答 1

Stack Overflow用户

发布于 2013-10-02 02:19:54

不确定,但当您编码_data时,您不会给它一个键:

代码语言:javascript
复制
[aCoder encodeBytes:&_data length:sizeof(float *)];

当您解码_data时,使用密钥data

代码语言:javascript
复制
 const uint8_t *buffer = [aDecoder decodeBytesForKey:data returnedLength:&length];

也许您需要一个版本的encodeBytes,它也需要一个键

代码语言:javascript
复制
 encodeBytes:length:forKey:
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19128935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档