[英]NSCoder encoding and decoding of c data type
我正在和應用程序將音頻傳輸到接收服務器。 我想對音頻緩沖區進行編碼以便流式傳輸。 我做了一個存儲該緩沖區和其他信息的類。 在對主要對象進行編碼后對數據進行解碼時,這兩個對象具有不同的音頻緩沖區。
所以結論是我在編碼/解碼中犯了一個錯誤。 這是我編碼緩沖區的代碼
- (void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeBytes:&_data length:sizeof(float *)];
[aCoder encodeInt:_numFrames forKey:numFrames];
[aCoder encodeInt:_numChannels forKey:numChannels];
}
注意 _data
具有(float *)
c數據類型
解碼邏輯在這里
- (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;
}
我正在使用此方法比較它們是否相同
- (BOOL)isEqual:(id)object {
AudioPacket *compareObject = (AudioPacket *)object;
return (_data == compareObject.data && _numFrames == compareObject.numFrames && _numChannels == compareObject.numChannels);
}
不確定,但是在編碼_data
您沒有給它一個密鑰:
[aCoder encodeBytes:&_data length:sizeof(float *)];
解碼_data
您使用密鑰data
:
const uint8_t *buffer = [aDecoder decodeBytesForKey:data returnedLength:&length];
也許您想要一個也需要一個密鑰的encodeBytes
版本
encodeBytes:length:forKey:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.