簡體   English   中英

如何編碼和解碼const char *

[英]How to encode and decode a const char *

這是我第一次嘗試序列化/反序列化對象。 該對象的一個​​成員是一種const char *。

---------------------------------------- 這里添加了信息 ------- ---------------------------

此const char *是表示圖像的字節數組。 由於圖像識別要求,我真的需要從UI獲取值並從UI返回並將其存儲為字節數組。 我希望這可以解決一些困惑。

------------------------------------------- 結束於此 ----- --------------------------------

我對解碼和編碼的選項感到困惑。 我無法理解使用哪個選項,唯一有意義的是要求at:(const void *)數組。 那里有什么?

- (id)initWithCoder:(NSCoder *)decoder
{
    self = [super init];
    if (self) {

以下是我無法弄清楚的界限。 我有前兩個參數好,但第三個參數是什么? at:的參數是一個數組。 但我沒有陣列。 我應該將這些解碼為數組嗎? 如果是這樣,那么我需要初始化一個數組以將字符放入?

        _templateData = [decoder decodeArrayOfObjCType:_templateData count:_templateSize at:<#(void *)#>]; //const char *templateData; 

之后似乎沒問題:

        _templateSize = [decoder decodeIntegerForKey:@"templateSize"];       //NSUInteger templateSize;
        _templateQuality = [decoder decodeIntForKey:@"templateQuality"];     //int templateQuality;
        _templateLocation = [decoder decodeIntForKey:@"templateLocation"];   //int templateLocation;
    }
    return self;
}

然后有編碼它。

- (void)encodeWithCoder:(NSCoder *)coder
{

同樣的問題在這里 我沒有陣列。 我是否需要初始化數組以將字符放入? 是這條線應該如何工作?

    [coder encodeArrayOfObjCType:_templateData count:_templateSize at:<#(const void *)#>]

其余的再次出現:

    [coder encodeInteger:_templateSize forKey:@"templateSize"];
    [coder encodeInt:_templateQuality forKey:@"templateQuality"];
    [coder encodeInt:_templateLocation forKey:@"templateLocation"];

}

有沒有人成功編碼和解碼了一個const char *的類型?

謝謝您的幫助。

聽起來最好的解決方案是將您的數據數組轉換為NSData實例,並對其進行編碼。 這非常簡單:

NSData *data = [NSData dataWithBytesNoCopy:_templateData length:lengthOfTemplateData freeWhenDone:NO];
[coder encodeObject:data forKey:@"templateData"];

然后,用於解碼:

NSData *data = [decoder decodeObjectForKey:@"templateData"];
[data getBytes:_templateData length:sizeOfTemplateDataBuffer]; // Assumes _templateData has been allocated to hold sizeOfTemplateDataBuffer bytes.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM