2016-03-10 185 views
0

我需要這種結構C++ - 轉換結構爲char

typedef struct zidrecord2 { 
     char version; 
     char flags;  
     char filler1; 
     char filler2; 
     unsigned char identifier[IDENTIFIER_LEN]; 
     unsigned char rs1Interval[TIME_LENGTH]; 
     unsigned char rs1Data[RS_LENGTH];   
     unsigned char rs2Interval[TIME_LENGTH]; 
     unsigned char rs2Data[RS_LENGTH];   
     unsigned char mitmKey[RS_LENGTH];  
} 

轉換爲char *或其他對象,允許再次回滾到我試試這個對象 :

zidrecord2_t* amostra = zidRecord->getRecordData(); 

const char *recordData = reinterpret_cast<const char*>(zidRecord->getRecordData()); 
    __android_log_print(ANDROID_LOG_INFO, "MyTag", "The value is %s",recordData); 
    amostra = reinterpret_cast<zidrecord2_t*>(recordData); 
    __android_log_print(ANDROID_LOG_INFO, "MyTag", "The value is %s",recordData); 

但我得到以下錯誤:

error: reinterpret_cast from type 'const char*' to type 'zidrecord2_t* {aka zidrecord2*}' casts away qualifiers 
    amostra = reinterpret_cast<zidrecord2_t*>(recordData); 

我怎樣才能通過這個問題?或以另一種方式實施?

+0

'typedef結構X {}Ÿ;'是C-主義。在C++中,struct名稱沒有自己的名稱空間,所以更喜歡使用較少名稱空間的結構體struct Y {};'。 – molbdnilo

回答

1
amostra = reinterpret_cast<const zidrecord2_t*>(recordData); 

演員從constconst

如果要將const轉換爲離開,請從頭開始使用非const指針。

0

您可以添加一個用戶定義的轉換操作符:

所以你的代碼可能如下所示:

typedef struct zidrecord2 { 
    char version; 
    char flags;  
    char filler1; 
    char filler2; 
    unsigned char identifier[IDENTIFIER_LEN]; 
    unsigned char rs1Interval[TIME_LENGTH]; 
    unsigned char rs1Data[RS_LENGTH];   
    unsigned char rs2Interval[TIME_LENGTH]; 
    unsigned char rs2Data[RS_LENGTH];   
    unsigned char mitmKey[RS_LENGTH]; 

    operator char*() const { return ConvertToCharPointerHere(); 
}